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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
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:
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
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ń:
for var in $1 $2 $3 $4 $5 ; do
na:
while [ -n "$1" ]; do
bo się pogubisz przy licznych arumentach.
Offline
1. Bratam się z bashem od tygodnia. Żaden poradnik o czymś takim nie wspominał :)
2. Dzięki. Dobrze zrozumiałem?
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
Tak na oko (nie sprawdzałem w praktyce) o to chodzi (tylko przy każdym przypadku musisz dawać shift, inaczej się zapętli).
Offline
[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.
rm -rf --help jakis_bardzo_wazny_plik
Offline
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
Strony: 1
Time (s) | Query |
---|---|
0.00008 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00093 | 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.119.108.233' WHERE u.id=1 |
0.00074 | UPDATE punbb_online SET logged=1732754922 WHERE ident='18.119.108.233' |
0.00056 | SELECT * FROM punbb_online WHERE logged<1732754622 |
0.00085 | SELECT topic_id FROM punbb_posts WHERE id=185610 |
0.00202 | SELECT id FROM punbb_posts WHERE topic_id=20046 ORDER BY posted |
0.00068 | 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.00011 | SELECT search_for, replace_with FROM punbb_censoring |
0.00075 | 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.00075 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=20046 |
Total query time: 0.00751 s |