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 instrukcję case 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 cudzysłowie nawiasie. Ponadto zmienne weź w cudzysłów
Ostatnio edytowany przez winnetou (2010-05-22 19:36:13)
Offline
lepiej ustaw domyślny $LOG jeśli pusty:
LOG=${LOG:-N}
to oznacza: $LOG = $LOG lub, jeśli ta zmienna jest pusta, "N".
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'
zawsze 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