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

[center][url=http://adf.ly/Y8HMh]Dropbox: 500MB gratis[/url]
[url=http://adf.ly/?id=5385762]AdFly - zarabiaj na linkach[/url]
[url=http://adf.ly/YIOh1]UIQ3 is not dead![/url]
[url=http://eu.worldofwarplanes.com][img]https://dl.dropbox.com/u/21323278/wowpalphabareng.png[/img][/url][/center]

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 [tt]getopts[/tt].

2. Jeśli już musisz — za pomocą [tt]shift[/tt] możesz „usuwać” argumenty (po [tt]shift 1[/tt] $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.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: 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

[center][url=http://adf.ly/Y8HMh]Dropbox: 500MB gratis[/url]
[url=http://adf.ly/?id=5385762]AdFly - zarabiaj na linkach[/url]
[url=http://adf.ly/YIOh1]UIQ3 is not dead![/url]
[url=http://eu.worldofwarplanes.com][img]https://dl.dropbox.com/u/21323278/wowpalphabareng.png[/img][/url][/center]

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.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

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

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Brno, Česko
Zarejestrowany: 2007-12-22
Serwis

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

[b]kondziu jah[/b]: 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

Spinnen Essen: [url=http://fluxboxpl.org/portal/]FluxboxPL[/url] [url=http://przepis-na-lo.pl/]Przepis na LibreOffice[/url]

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ść :)


[center][url=http://adf.ly/Y8HMh]Dropbox: 500MB gratis[/url]
[url=http://adf.ly/?id=5385762]AdFly - zarabiaj na linkach[/url]
[url=http://adf.ly/YIOh1]UIQ3 is not dead![/url]
[url=http://eu.worldofwarplanes.com][img]https://dl.dropbox.com/u/21323278/wowpalphabareng.png[/img][/url][/center]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.011 seconds, 9 queries executed ]

Informacje debugowania

Time (s) Query
0.00013 SET CHARSET latin2
0.00006 SET NAMES latin2
0.00134 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.224.215.101' WHERE u.id=1
0.00117 UPDATE punbb_online SET logged=1716005792 WHERE ident='18.224.215.101'
0.00093 SELECT * FROM punbb_online WHERE logged<1716005492
0.00101 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=20046 AND t.moved_to IS NULL
0.00009 SELECT search_for, replace_with FROM punbb_censoring
0.00235 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=20046 ORDER BY p.id LIMIT 0,25
0.00122 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=20046
Total query time: 0.0083 s