Boucle while script shell

Fermé
hyde Messages postés 8 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 11 juillet 2012 - 11 juil. 2012 à 00:42
 Utilisateur anonyme - 11 juil. 2012 à 08:52
Bonjour,

Venant tout juste de commencer le scriping shell, j'ai fait un petit script qui teste si ma machine a une connexion internet en effectuant un simple ping à google.fr.
Le but est de sortir de la boucle en cas d'échec du ping ou de faire le ping "indéfiniment" si google est toujours joignable.

Mon script est le suivant:

PING='/bin/ping'
EXTHOST1='www.google.com'
etat=true
count=0

while [ $etat ]
do

$PING -c1 $EXTHOST1 1>/dev/nul
ret=$?
if [ $ret -ne 0 ]
then
#count=$(($count + 1))
echo "ping n a pas marche, nbre de fois =$count "
etat=false
sleep 4
elif [ $ret -eq 0 ]
then
#count=$(($count + 1))
echo "ping a marche, $etat, nbre de fois =$count "
etat=true
sleep 4
fi
done

Mon problème: je n'arrive pas à sortir de ma boucle lorsque le ping ne marche pas et que ma variable etat passe à false.
Quelqu'un a-t-il une idée de là ou j'ai fait une erreur?

Merci

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 juil. 2012 à 07:46
Salut,

while [ "${etat}" = true ] 

Devrait aller mieux ;-))

Et c'est "/dev/null" avec 2 ELLES et non un seul ;-\
0
salut,

- le test de hyde sur la variable etat sera toujours vrai, car dans son code elle existe toujours et a toujours une valeur.
je suggère
while $etat; do
tout simplement ($etat. étant true, ou false)

- le elif n'est pas utile, un simple else suffit
0