januszm Napisano Sierpień 5, 2009 Zgłoszenie Share Napisano Sierpień 5, 2009 (edytowane) Witam, Staram się napisać skrypt: #!/bin/bash host="192.168.0.1" num=ping -c 2 $host 1>/dev/null if [ $num -eq 0 ]; then exit else [ $num -gt 0 ]; then cp /home/backup/script.txt /root/Desktop/ xmessage print "Please restart program" fi Przy próbie odpalenia mam następujące błędy: line 2 c: command not found line 7 syntax error near unexpected token 'then' line 7 else [ &num -gt 0 ] ; then NIe jestem w tym dobry więc proszę o pomoc. Pozdrawiam, Janusz Edytowane Sierpień 5, 2009 przez WalDo dodanie znaczników code. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Sierpień 5, 2009 Zgłoszenie Share Napisano Sierpień 5, 2009 Po pierwsze umieszczaj kody miedzy znacznikami [code][/code] lub - jeśli są bardzo długie - między [codebox][/codebox]. A może sam spróbowałbyś przeanalizować kod?W linii 2. jeśli wypisało błąd, że nie ma polecenia "c", to do czego to się może odnosić? Jedyne "c" jakie widzę to w linii num=ping -c 2 $host 1>/dev/null Czego tam może brakować? W linii 7. Hmm... czytałeś w ogóle jakiś podręcznik do basha? Widziałeś jak wygląda składania "if" z wykorzystaniem "else"? Ja byk masz napisane "line 7 syntax error near unexpected token 'then'".Nie wiem co chciałeś osiągnąć pisząc "num=ping -c 2 $host 1>/dev/null" ale próba (w kolejnym wierszu) porównania tej zmiennej do zera zawsze da wynik negatywny. Może zamiast przesyłać prace domowe na forum czas zapoznać się z podstawami basha np. → http://www.itlublin.pl/node/129 albo jeszcze lepiej w pełnej wersji po angielsku → http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
januszm Napisano Sierpień 5, 2009 Autor Zgłoszenie Share Napisano Sierpień 5, 2009 Dzięki za odpowiedź, 1. Nie jest to praca domowa - staram się nauczyć bash'a, więc staram się to zrobić na przykładach 2. num=ping -c 2 $host 1>/dev/null ma spingować hosta i sprawdzić, czy odpowiada... (to polecenie jak się zdążyłem zorientować sprawdza, czy są błędy w ping i jeżeli błędy = 0 to exit, natomiast jeżeli błędu są > 0 to cp /home/backup/script.txt /root/Desktop/ xmessage print "Please restart program" Pozdrawiam, Janusz Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Sierpień 5, 2009 Zgłoszenie Share Napisano Sierpień 5, 2009 2. num=ping -c 2 $host 1>/dev/null ma spingować hosta i sprawdzić, czy odpowiada... (to polecenie jak się zdążyłem zorientować sprawdza, czy są błędy w ping i jeżeli błędy = 0 to exit, natomiast jeżeli błędu są > 0 to cp /home/backup/script.txt /root/Desktop/A przyjrzałeś się jak działa ping? Nie pomyślałeś, że nie zwraca on wartości liczbowych? To polecenie przypisuje do zmiennej "num"... no właśnie... Tak naprawdę nic nie przypisuje. Samo polecenie "ping -c 2 $host 1>/dev/null" wysyła dwa sygnały do adresu podstawionego do zmiennej $host i przekierowuje standardowe wyjście na /dev/null czyli w głęboki kosmos. Sądzę, że to czego byś oczekiwał to wykonanie tego polecenia i odebranie jego kodu błędu - zmienna systemowa $? zwraca 0 (zero), gdy poprzednio wywołane polecenie zakończyło się sukcesem lub wartość >0, gdy wystąpił błąd. Myślę, że to co chcesz wykonać powinno wyglądać np. tak: ping -c 2 $host 1>/dev/null num=$? zamiast Twojego num=ping -c 2 $host 1>/dev/null Jeśli tak napiszesz oraz oczywiście poprawisz składnię if...else.., to powinno zadziałać. Tak na marginesie próbowanie działania skryptów z konta użytkownika root nie jest mądre i może się fatalnie skończyć, dlatego rób to ze zwykłego użytkownika a polecenie cp /home/backup/script.txt /root/Desktop/ zmień raczej na coś w rodzaju cp /home/backup/script.txt $HOME/Desktop/ Myślę, że Twój system będzie Ci za to wdzięczny [EDIT] Jeszcze info pomocne w debugowaniu błędów → http://www.itlublin.pl/node/142 oraz słów kilka nt. zmiennych specjalnych takich jak np. $? → http://www.dief.republika.pl/vars.html Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
januszm Napisano Sierpień 5, 2009 Autor Zgłoszenie Share Napisano Sierpień 5, 2009 Dziękuję za nakierowanie i pozdrawiam, Janusz Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
...>>udzior<<... Napisano Sierpień 6, 2009 Zgłoszenie Share Napisano Sierpień 6, 2009 Masz tutaj pingowanie hosta jako funkcja. host_ping () { if ! ping -c 1 -w 5 "$1" &>/dev/null; then return 1 else return 0 fi } P.S. num=`ping -c 2 $host 1>/dev/null` http://www.ournet.pl/kursbasha/cytat.html Powodzenia w nauce. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Sierpień 6, 2009 Zgłoszenie Share Napisano Sierpień 6, 2009 Powodzenia w nauce.A ja będę jak zwykle obstawał przy swoim: lepsza wędka od ryby. Dla kogoś kto zna shella napisanie takiej funkcji to pikuś, tylko jaki pożytek dla uczącego się jeśli taką funkcję sobie skopiuje. Nie lepiej, żeby sam napisał? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się