#1 Le 15/11/2019, à 11:27
- remi82
Bash test si IP KO - Ajout d'un si, mais c'est en erreur
Bonjour,
J'ai actuellement un bash, qui lit un fichier, et qui pour chaque ligne fait un ping. Si, KO, celui-ci m'envoi un mail.
#!/bin/bash
#Declaration des variables
wsmtp=smtp
wuser=user
wmdp=mdp
wexped=exped
wdest=adresse_mail
#fin
dir=/home/users/ping_routeurs_ip.txt
#read dir
if [ -e $dir ]
then
while read ligne #pour chaque ligne
do
wip=$(echo $ligne | cut -d: -f1)
wsujet=$(echo $ligne | cut -d: -f2)
wmessage=$(echo $ligne | cut -d: -f3)
#Envoi du mail si KO
HOST=$wip;COUNT=4;count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }');if [ $count -eq 0 ]; then sendEmail -s $wsmtp -xu $wuser -xp $wmdp -o tls=yes -f $wexped -t $wdest -u $wsujet -m $wmessage; fi
done < "$dir"
else
sendEmail -s $wsmtp -xu $wuser -xp $wmdp -o tls=yes -f $wexped -t $wdest -u 'Fichier non trouve' -m "Le fichier des IP n'a pas été trouvé";
fi
Cependant, il arrive que je ne veuille plus un ping d'une ligne pendant quelques temps.
Je modifie mon fichier des IP en commencant la ligne par #
J'ai ajouté dans mon bash
if [[ $wip != '#*' ]]
then
fi
dir=/home/users/ping_routeurs_ip.txt
#read dir
if [ -e $dir ]
then
while read ligne #pour chaque ligne
do
wip=$(echo $ligne | cut -d: -f1)
wsujet=$(echo $ligne | cut -d: -f2)
wmessage=$(echo $ligne | cut -d: -f3)
if [[ $wip != '#*' ]]
then
#Envoi du mail si KO
HOST=$wip;COUNT=4;count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }');if [ $count -eq 0 ]; then sendEmail -s $wsmtp -xu $wuser -xp $wmdp -o tls=yes -f $wexped -t $wdest -u $wsujet -m $wmessage;
fi
done < "$dir"
Mais j'obtiens le message d'erreur :
Syntax error: "done" unexpected (expecting "fi")
J'ai beau chercher, je ne vois pas mon erreur.
Merci
Dernière modification par remi82 (Le 15/11/2019, à 11:30)
Hors ligne
#2 Le 15/11/2019, à 11:35
- pingouinux
Re : Bash test si IP KO - Ajout d'un si, mais c'est en erreur
Bonjour,
Dans ton fichier, tu as 3 if et un seul fi.
Hors ligne
#3 Le 15/11/2019, à 11:48
- FrancisFDZ
Re : Bash test si IP KO - Ajout d'un si, mais c'est en erreur
Bonjour,
Je ne suis pas expert, mais le vois :
L 3 : "if ..."
L 4 : "then ..."
L 5 : "while ..."
L 6 : "do ..." (correspond au while)
L 10 ; "if ..."
L 11 :"then ..." (suite du "if")
L 14 "fi" (fermeture du if de la ligne 10)
L 16 ; "done" (fermeture du "do" de la ligne 6)
Il manque bien un "fi" pour fermer la ligne 3
Par contre, je ne comprends pas le "syntax error" ; pour moi, le "done" est bien placé, un "fi" devrait figurer en ligne suivante
[Edit] Je vois que pingouinux a répondu, il s'y connait beaucoup mieux que moi, mais il a apparemment trouvé un "if" qui m'a échappé [/Edit]
Dernière modification par FrancisFDZ (Le 15/11/2019, à 11:52)
-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]
Hors ligne
#4 Le 15/11/2019, à 11:51
- remi82
Re : Bash test si IP KO - Ajout d'un si, mais c'est en erreur
Bonjour,
C'est quand j'ai copié mon code sur le forum. J'ai oublié un fi.
Et j'ai ajouté le fi manquant.
Maintenant, j'obtiens comme erreur :
[[: not found
Encore merci
Dernière modification par remi82 (Le 15/11/2019, à 11:56)
Hors ligne
#5 Le 15/11/2019, à 11:58
- Watael
Re : Bash test si IP KO - Ajout d'un si, mais c'est en erreur
d'une manière générale :
pourquoi appeler un fichier "dir"ectory ?
il faut toujours mettre le Développement de variables entre guillemets, surtout dans les tests.
grep|awk|awk, c'est pas possible. un seul awk doit suffire.
un script bash doit être exécutable, et/ou être appelé avec... bash ! parce que sh n'est pas forcément un lien vers /bin/bash.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 15/11/2019, à 12:09
- remi82
Re : Bash test si IP KO - Ajout d'un si, mais c'est en erreur
Je viens de modifier mon contrôle.
C'est maintenant ok.
Merci à tous
Hors ligne