Rechercher : dans
Par :

Script bash : boucle while dans while

Blanc57, le 31 mai 2009 à 10:44:20 
 Signaler ce message aux modérateurs

Bonjour,

Débutant en matière de script bash (zsh ici), je coince sur une boucle while dans while.
Je suis sous Debian Lenny avec zsh...

Mon objectif est de faire un script qui m'envoie un mail avec mon adresse IP (dynamique) lorsque celle-ci change.

Voilà donc ce que j'ai fait (pour l'instant la fonction d'envoi de mail est symbolisée par un "echo") :

#!/bin/zsh

IPACTUAL=$(www-browser checkip.dyndns.com | awk '{ print $4 }')
while [ "$IPLAST"!="$IPACTUAL" ] ;
do
echo "Adresse IP a change $IPACTUAL : sendmail"
IPLAST=$IPACTUAL
while [ $IPLAST=$IPACTUAL ] ;
do
sleep 10
IPACTUAL=$(www-browser checkip.dyndns.com | awk '{ print $4 }')
done
done



Seulement cela ne marche pas, j'ai l'impression que le script bloque dans le second "while" et ne revient pas à la première boucle lorsque l'adresse change.

La variable $IPLAST reste-t-elle "valable/fixée" dans cette deuxième boucle "while" ? Je réactualise la variable IPACTUAL après le sleep pour vérifier si l'IP a changée, mais j'ai l'impression que même en cas de changement, le script reste dans cette second boucle...
Je partais du principe que si la condition n'est pas remplie dans la seconde boucle "while" (donc que IPLAST est différent de IPACTUAL), le script reprendrait à la première boucle "while" ? Est-ce que je me tromperais ?

J'ai écrit un autre script, en utilisant des fonctions. Celui-ci fonctionne mais je souhaitais trouver une solution plus élégante et plus courte et c'est pourquoi je pensais à utiliser "while".
Voici le premier script :

#!/bin/zsh

# Mise a 0 de la variable IPLAST au emarrage du script
IPLAST=""

# fonction test de l'IP actuelle
# Renvoir vers la fonction d'attente "waitabit" en cas d'IP inchanee
# et renvoie vers la fonction d'envoi de mail si l'IP a chae

function testip {
IPACTUAL=$(www-browser checkip.dyndns.com | awk '{ print $4 }')
if [ "$IPLAST" = "$IPACTUAL" ] ; then
waitabit
else
if [ "$IPLAST" != "$IPACTUAL" ] ; then
send_mail
fi
fi
}

# fonction d'envoi de mail si l'IP a change
function send_mail {
echo "Changement d'adresse IP : envoi de mail"
waitabit
}

#fonction d'attente si l'IP reste inchangee
function waitabit {
sleep 180
IPLAST=$IPACTUAL
testip
}

# lancement initial du script
testip


Voilà...
Votre aide me serait très précieuse et je remercie d'avance tous ceux qui auront l'amabilité de se pencher sur mon problème pour m'apporter leur concours.

;)

Configuration: Windows XP
Firefox 3.0.10

Meilleures réponses pour « Script bash : boucle while dans while » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Bash - Les paramètres VoirIntroduction Les paramètres positionnels Exemple 1 Les paramètres spéciaux Exemple 2 Initialiser des paramètres - La commande "set" - Exemples - La commande "shift" - Exemple 3 Introduction Il est possible de fournir à un script,...