Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-11-12 16:22:02

  kondziu jah - Użytkownik

kondziu jah
Użytkownik
Skąd: Zgorzelec
Zarejestrowany: 2011-05-04

[bash] jeśli opcja skryptu spełnia warunek, to działaj na kolejnej

Skrypt może być uruchomiony z kilkoma opcjami, dlatego wpadłem na pomysł by napisać prostą tablicę do identyfikowania opcji, używając for i case. Przy wywołaniu skryptu z m.in. opcją ''-p'' jako następna opcja podawana jest ścieżka. Opcje mogą być wpisywane w dowolnej kolejności, dlatego nie wiadomo, która jest "-p". Nie mam pojęcia co zrobić, by po zidentyfikowaniu opcji ''-p'' skrypt wykonał działanie na ścieżce (czyli opcji o jeden wyższej). Jak to się robi?
Kod poglądowy:

Kod:

zmienna1=0
zmienna2=0
zmienna3=1
for var in $1 $2 $3 $4 $5 ; do
   case $var in
      "opcja1") zmienna1=1 ;;
      "opcja2") zmienna2=1 ; zmienna3=0 ;;
      "-p") echo "wybrana ścieżka to "$opcja-o-1-większa-od-p".";;
      *) echo ""
   esac
done

Offline

 

#2  2011-11-12 16:31:53

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [bash] jeśli opcja skryptu spełnia warunek, to działaj na kolejnej

1. Najlepiej skorzystać z getopts.

2. Jeśli już musisz — za pomocą shift możesz „usuwać” argumenty (po shift 1 $1 zniknie, $2 stanie się $1, itd.). W takiej sytuacji zmień:

Kod:

for var in $1 $2 $3 $4 $5 ; do

na:

Kod:

while [ -n "$1" ]; do

bo się pogubisz przy licznych arumentach.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#3  2011-11-12 16:56:31

  kondziu jah - Użytkownik

kondziu jah
Użytkownik
Skąd: Zgorzelec
Zarejestrowany: 2011-05-04

Re: [bash] jeśli opcja skryptu spełnia warunek, to działaj na kolejnej

1. Bratam się z bashem od tygodnia. Żaden poradnik o czymś takim nie wspominał :)

2. Dzięki. Dobrze zrozumiałem?

Kod:

while [ -n "$1 ] ; do
  case $1 in
      "a") echo something ;;
      "b") echo "something else" ;;
      "-p") shift
      wget http://something.else/slash.dot -P $1 ;;
      *) echo "nieprawidłowy argument "$1"" ; exit ;;
   esac
   shift
done

Offline

 

#4  2011-11-12 17:02:52

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [bash] jeśli opcja skryptu spełnia warunek, to działaj na kolejnej

Tak na oko (nie sprawdzałem w praktyce) o to chodzi (tylko przy każdym przypadku musisz dawać shift, inaczej się zapętli).


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#5  2011-11-12 17:33:36

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: [bash] jeśli opcja skryptu spełnia warunek, to działaj na kolejnej

kondziu jah: tylko jedna uwaga — zamiast przy obsłudze flagi -p od razu wywoływać wgeta, lepiej jest tam wartość zmiennej $1 przypisać do jakiejś innej zmiennej (dowolnej, może być $URL) i samego wgeta wywoływać poza pętlą.

Wynika to m.in. z tego, że użytkownik po fladze -p może podać jakąś inną, która powinna zmodyfikować działanie skryptu.

Zobacz np.

Kod:

rm -rf --help jakis_bardzo_wazny_plik

Offline

 

#6  2011-11-12 18:09:36

  kondziu jah - Użytkownik

kondziu jah
Użytkownik
Skąd: Zgorzelec
Zarejestrowany: 2011-05-04

Re: [bash] jeśli opcja skryptu spełnia warunek, to działaj na kolejnej

Ten wget to tylko przykład. Docelowo case stworzyłem po to, by za pomocą opcji użytkownik mógł zmodyfikować wartość kilku zmiennych, czyli włączyć/wyłączyć kilka funkcji.

Ale masz plusa za czujność :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)