[bash] - ciagła pętla


(macios4) #1

Piszę skrypt który by sprawdzał połaczenie z netem - jeśli jest to wówczas sprawdza pocztę gmail - a jeśli nie ma neta- to powinien w kółko (w pętli) sprawdzać co 10 sekund połączenie z netem tak długo, aż będzie internet i wówczas jeśli już bedzie internet to sprawdziłby pocztę. Problem jest jednak ze zrobieniem skutecznej pętli gdy nie ma połaczenia z netem. Skrypt roboczy:

#!/bin/bash

clear
WGET="/usr/bin/wget"
$WGET -q --tries=20 --timeout=10 http://www.google.com -O /tmp/google.idx &> /dev/null

function check_net
{
while [true]; do
while ! check; do sleep 10; done
echo sprawdz_poczte
done
}

if [! -s /tmp/google.idx]; then
echo "net Offline.. czekam 10 sekund i sprawdzam ponownie..."
check_net
else
echo "net Online"
fi

na razie jak widać w tej wersji roboczej nie dałem funkcji sprawdzania poczty, dopóki nie zadziała prawidłowo funkcja sprawdzania połaczenia z netem. Jak to naprawić?


(Piesek64) #2

Istnieje polecenie sleep.

if [! -s /tmp/google.idx]; then
echo "net Offline.. czekam 10 sekund i sprawdzam ponownie..."
sleep 10
check_net
else
echo "net Online"
fi

(macios4) #3

Tak, racja, przeoczyłem, ale i tak nie zmienia to faktu że skrypt - pętl nie działa jak należy.


(Piesek64) #4
clear
x=0
WGET="/usr/bin/wget"
function check_net() {
$WGET -q --tries=20 --timeout=10 http://www.google.com -O /tmp/google.idx &> /dev/null
if [[-z "`cat /tmp/google.idx`"]]
then
return "nie ma"
else
sprawdz_poczte
x=1
fi

}
while [[$x -lt 1]]
then
check_net
sleep 10
fi

(macios4) #5

Po paru kombinacjach skrypt działa:

#!/bin/bash

x=0
#clear

function check_mail
{
#clear
echo ONLINEmail
}

function check_net() {
#clear
echo wait_test_net...
wget -q --timeout=3 http://google.pl -O $HOME/Pulpit/wynik.idx
if [[-z "`cat $HOME/Pulpit/wynik.idx`"]]
then
echo nie_ma_neta
return 0 #nie ma neta
else
check_mail
x=1
fi
}

check_net
while [[$x -lt 1]] ; do
check_net
done

rm -rf $HOME/Pulpit/wynik.idx

w terminalu działa jak należy, ale docelowo chciałem go dodać do appletu MATE dodaj do panelu > komenda. Tutaj jednak bywają problemy, robi dziwne “krzaki” tam gdzie polecenie clear i nie do końca działa jak należy, ale sam skrypt działa jak trzeba.