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/.
Witam, jak można zabezpieczyć skrypt przed sytuacją w której bez wpisania żadnego znaku ktoś wciśnie enter?
Czy włączyć logowanie zdarzeń? (T/N):
<enter>
./small_1: line 42: [: =: unary operator expected
./small_1: line 51: [: =: unary operator expected
echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; if [ $LOG ] then while [ ! $LOG = "T" ] && [ ! $LOG = "N" ] do echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; done fi
Ostatnio edytowany przez buli (2010-05-22 16:57:24)
Offline
nie mam basha pod ręką ale chyba
if [ $LOG!='' ]
ale lepiej na while zrobić
P.S.
http://ultra.ap.krakow.pl/~bar/kursbasha/main.html
Offline
Sprawdzalem to zanim napisalem posta..
Czy włączyć logowanie zdarzeń? (T/N):
./small_1: line 42: [: =: unary operator expected
./small_1: line 52: [: =: unary operator expected
echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; if [ $LOG ] then while [ ! $LOG = "T" ] && [ ! $LOG = "N" ] && [ $LOG = '' ] do echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; done fi
Offline
daj if'a i while'a w podwójny nawias [[ ]]
Offline
Wykorzystaj [url=http://www.dief.republika.pl/case.html]instrukcję case[/url] zamiast if.
Ostatnio edytowany przez pyrion (2010-05-22 18:28:33)
Offline
jak bym chciał użyć case to bym go użył.. :)
Mogę prosić o przykład o co chodzi z tymi nawiasami?
Bo coś tam próbowałem i chyba nie do końca kumam..
Offline
echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; if [[ "$LOG" ]] then while [[ "$LOG" != "T" ]] && [[ "$LOG" != "N" ]] && [[ "$LOG" = '' ]] do echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; done fi
Nie jestem pewien dlaczego tak to działa ale u mnie też czasami skrypty się nie chcą uruchomić jak dam warunek w pojedynczym [s]cudzysłowie[/s] nawiasie. Ponadto zmienne weź w cudzysłów
Ostatnio edytowany przez winnetou (2010-05-22 19:36:13)
Offline
lepiej ustaw domyślny [tt]$LOG[/tt] jeśli pusty:
LOG=${LOG:-N}
to oznacza: [tt]$LOG[/tt] = [tt]$LOG[/tt] lub, jeśli ta zmienna jest pusta, "[tt]N[/tt]".
Podwójne nawiasy kwadratowe to bashyzm.
Offline
dodatkowo nie pomagaja..
azhag, co oznacza taki zapis w klamrach..?
w stosunku do głupiego LOG='N'
Ostatnio edytowany przez buli (2010-05-22 20:05:43)
Offline
LOG='N'
[b]zawsze[/b] ustawia N jako $LOG
Moje robi to co napisałem.
Porównaj:
echo $FOO BAR=${FOO:-domyślne} echo $BAR FOO=foo BAR=${FOO:-domyślne} echo $BAR
Offline
A no kumam już. Ale mimo wszystko zwraca błąd w przypadku pustej zmiennej..
./small_1: line 44: [: =: unary operator expected
./small_1: line 54: [: =: unary operator expected
Problem byl w tym ze
domyslna zmienna musiala pojawic sie po
if [ $LOG ] then while [ ! $LOG = "T" ] && [ ! $LOG = "N" ] do echo "Czy włączyć logowanie zdarzeń? (T/N):"; read LOG; done fi
Ostatnio edytowany przez buli (2010-05-23 02:53:10)
Offline
A spróbuj tak:
while [ "$LOG" != "T" ] && [ "$LOG" != "N" ]
A najlepiej przedstaw większy kawałek skryptu z linijkami 44 i 54 ;))
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00096 | 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.219.207.115' WHERE u.id=1 |
0.00073 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.219.207.115', 1733364521) |
0.00053 | SELECT * FROM punbb_online WHERE logged<1733364221 |
0.00053 | SELECT topic_id FROM punbb_posts WHERE id=148427 |
0.00453 | SELECT id FROM punbb_posts WHERE topic_id=16899 ORDER BY posted |
0.00120 | 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=16899 AND t.moved_to IS NULL |
0.00068 | SELECT search_for, replace_with FROM punbb_censoring |
0.00117 | 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=16899 ORDER BY p.id LIMIT 0,25 |
0.00126 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=16899 |
Total query time: 0.01172 s |