Potrzebujesz pomocy z C, C++, perl, python, itp.
D_Sobieraj
Posty: 11 Rejestracja: 28 listopada 2009, 03:17
Post
autor: D_Sobieraj » 28 listopada 2009, 03:20
Witam.
Mam pewien problem z Bashem, piszę skrypt do autopołączenia z internetem gdy to zostanie zerwane. Napisałem coś takiego:
Kod: Zaznacz cały
#!/bin/bash
ping -c 1 wp.pl | grep "ping: unknown host wp.pl"
read x
z="ping: unknown host wp.pl"
if [ $x = "$z" ]; then
echo "elo"
fi
Jednak coś nie działa, ponieważ skrypt staje na etapie gdy wpiszę:
Pokazuje się albo (gdy odłączę internet):
i zatrzymuje się. A jak jest podłączony to nie robi nic. Otwiera się i stoi. 0 komunikatów.
Może mała wskazówka, jak powinienem dokończyć skrypt?
Z góry dziękuję.
D_Sobieraj
Posty: 11 Rejestracja: 28 listopada 2009, 03:17
Post
autor: D_Sobieraj » 28 listopada 2009, 10:37
Trochę to trudne, z tego co widzę :-P
Naprawdę nikt nie wie dlaczego ten skrypt w bashu nie działa? Ten język wydaje się prosty.
Skrypt powinien odczytać w przypadku rozłączenia internetu ten grep.
Odczytać grepa, porównać ze zmienną z. I uruchomić skrypt restartu.
Co jest nie tak? Powinno według mnie to działać.
enz
Posty: 12 Rejestracja: 30 lipca 2009, 17:16
Post
autor: enz » 28 listopada 2009, 11:56
Polecenie read służy do pobierania danych od użytkownika. Poczytaj:
http://www.linux.rk.edu.pl/w/p/bash-skrypty/
Tak na szybko:
Kod: Zaznacz cały
#!/bin/bash
PING="$( ping -c 1 wp.pl | grep "ping: unknown host wp.pl" )"
if [ "${PING}" = "ping: unknown host wp.pl" ]
then
echo "elo"
fi
D_Sobieraj
Posty: 11 Rejestracja: 28 listopada 2009, 03:17
Post
autor: D_Sobieraj » 28 listopada 2009, 12:53
Dzięki, a takie coś? Ma prawo działąć ?
Kod: Zaznacz cały
$(ping -c 1 wp.pl | grep "ping: unknown host wp.pl")
x="ping: unknown host wp.pl"
if [ "$?" != "$x" ];
then
echo "internet dziala!";
else
echo "internet niedziala!";
`(iwconfig wlan0 essid alfa_net4p_0-600-356-421 && /etc/init.d/networking restart)`
fi
I jeszcze pytanko, jak zrobić logfile? ¯eby zapisywał wszystko do .log
Intruder
Posty: 8 Rejestracja: 13 września 2008, 14:34
Post
autor: Intruder » 28 listopada 2009, 16:13
Nie znam w zasadzie basha(głównie składni) ale tak proste zadanie zajęło mi 3 minuty.
Kod: Zaznacz cały
time=`date`
echo $time " <-- brak dostępu do internetu" >> net.log
lessmian2
Member
Posty: 1088 Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków
Post
autor: lessmian2 » 28 listopada 2009, 23:21
Dzięki, a takie coś? Ma prawo działąć ?
Nie, nie ma.
Kod: Zaznacz cały
$(ping -c 1 wp.pl | grep "ping: unknown host wp.pl")
To, to co ma robić? Nie pobierasz w żaden sposób wyniku polecenia
ping
Porównujesz tutaj status wyjścia zwracany przez ostatnio wywołane polecenie, w tym wypadku
ping (to jest liczba, nie string!) ze stringiem. To nie będzie działało tak jak oczekujesz.
enz i
Intruder już właściwie napisali Ci jak to mogłoby wyglądać. Przeczytaj, przemyśl i połącz, a na pewno osiągniesz cel ;-)
D_Sobieraj
Posty: 11 Rejestracja: 28 listopada 2009, 03:17
Post
autor: D_Sobieraj » 29 listopada 2009, 01:31
1. To w jaki sposób mam pobrać wynik polecenia ping ?
Sam skrypt
enz nie działa.
Kod: Zaznacz cały
#!/bin/bash
PING="$( ping -c 1 wp.pl | grep "ping: unknown host wp.pl" )"
if [ "${PING}" = "ping: unknown host wp.pl" ];
then
echo "elo"
else
echo "elo2"
fi
Jak internet działa, jest ok. Pokazuje mi elo2, ale gdy nie działa.
Mam już komunikat:
Co powinienem zrobić? Jakaś sugestia ?
Porównujesz tutaj status wyjścia zwracany przez ostatnio wywołane polecenie, w tym wypadku ping (to jest liczba, nie string!) ze stringiem. To nie będzie działało tak jak oczekujesz.
Czyli to co otrzymuje od pingu to liczba ? Czyli powinienem użyć zamiast = , -eq. ?!
grapeli23
Posty: 30 Rejestracja: 09 października 2009, 12:21
Post
autor: grapeli23 » 29 listopada 2009, 02:33
D_Sobieraj pisze: Co powinienem zrobić? Jakaś sugestia ?
Pierwsza rzecz jeśli chcesz się uczyć, to skorzystać z dokumentacji i ją czytać.
man ping pisze: Jeśli ping nie odbierze żadnych pakietów odpowiedzi, to zakończy działanie z kodem wyjścia 1. W przypadku błędu kod ten wynosi 2. W przeciwnym razie zwracane jest 0. Umożliwia to używanie kodu wyjścia do sprawdzania czy hosty żyją, czy gryzą ziemię.
Kod: Zaznacz cały
( ! ping -c1 wp.pl >/dev/null 2>&1 ) && networking restart >/dev/null 2>&1
Najprostsze rozwiązanie, to skorzystać z googla. Gotowych rozwiązań są setki a może i tysiące.
D_Sobieraj
Posty: 11 Rejestracja: 28 listopada 2009, 03:17
Post
autor: D_Sobieraj » 29 listopada 2009, 09:49
Kod: Zaznacz cały
#!/bin/bash
$( ping -c1 wp.pl )
if [ "$?" -eq "2" ];
then
echo "internet nie dziala!"
iwconfig wlan0 essid alfa_net4p_0-600-356-421 &
/etc/init.d/networking restart
time=`date`
echo $time " <-- brak dostępu do internetu" >> /mnt/dysk3/internet.log
else
echo "Internet dziala"
fi
Napisałem coś takiego, działa poprawnie
Dzięki.