Skocz do zawartości

Prosty Skrypt Bash Nie Działa


januszm

Rekomendowane odpowiedzi

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 przez WalDo
dodanie znaczników code.
Odnośnik do komentarza
Udostępnij na innych stronach

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?

  1. 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ć? :rolleyes:

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

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

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

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

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

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ę
×
×
  • Dodaj nową pozycję...