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/.

Użytkownik


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
fiOstatnio edytowany przez buli (2010-05-22 16:57:24)
Offline



Dzban Naczelny
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

Użytkownik


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
fiOffline




złodziej wirków ]:->
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

Użytkownik


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




złodziej wirków ]:->
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
fiNie 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






Admin łajza







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

Użytkownik


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






Admin łajza







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 $BAROffline

Użytkownik


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
fiOstatnio edytowany przez buli (2010-05-23 02:53:10)
Offline




złodziej wirków ]:->
A spróbuj tak:
while [ "$LOG" != "T" ] && [ "$LOG" != "N" ]
A najlepiej przedstaw większy kawałek skryptu z linijkami 44 i 54 ;))
Offline