Script shell
Résolu
mithandrir
-
mithandrir -
mithandrir -
Bonjour,
je suis débutant en shell et je cherche à faire a cherche à faire un script de comparaison ,
je m'explique , j'ai un fichier texte du genre :
66
15
69
554
22
19
et je dois comparer la valeur de chaque ligne avec une valeur fixe qui est : 90
avec comme réponse
si >90 echo "probleme"
si <90 echo " pas de probleme"
merci par avance pour l'aide apportée
je suis débutant en shell et je cherche à faire a cherche à faire un script de comparaison ,
je m'explique , j'ai un fichier texte du genre :
66
15
69
554
22
19
et je dois comparer la valeur de chaque ligne avec une valeur fixe qui est : 90
avec comme réponse
si >90 echo "probleme"
si <90 echo " pas de probleme"
merci par avance pour l'aide apportée
17 réponses
-
Salut,
ssh$ cat plop 66 15 69 554 22 19 ssh$ while read line; do if [ "$line" -ge 90 ]; then echo "$line : Problème"; else echo "$line : Pas de problème"; fi; done < plop 66 : Pas de problème 15 : Pas de problème 69 : Pas de problème 554 : Problème 22 : Pas de problème 19 : Pas de problème ssh$
;-)) -
Salut,
Tu peux le faire à grand coup de if et de < ou > mais c'est pas super... -
Salut,
D'autre versions un peu plus courtes ;-)$ for line in $(cat plop); do test $line -ge 90 && echo $line : Problème || echo $line : Pas de problème;done 66 : Pas de problème 15 : Pas de problème 69 : Pas de problème 554 : Problème 22 : Pas de problème 19 : Pas de problème $ awk '{if($1 > 90) {print $1 " : Problème"} else {print $1 " : Pas de problème"}}' plop 66 : Pas de problème 15 : Pas de problème 69 : Pas de problème 554 : Problème 22 : Pas de problème 19 : Pas de problème
-
merci beaucoup , j'ai juste un petit message d'erreur
[: -ge: unary operator expected à la fin du script
une idée -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Affiches-nous ce que tu tapes...
-
root]# vi toto.sh
#!/bin/bash
usep=`(df -HP | grep -vE '^Filesystem|tmpfs|cdrom|none' | awk '{ print $5 " " $1
}' | awk '{ print $1}' | cut -d'%' -f1)`
echo $usep > /tmp/usep.txt
awk ' { for(i=1;i<=NF;i++) {print $i } }' /tmp/usep.txt > /tmp/usepvert.txt
cat /tmp/usepvert.txt
while read ligne
do
if ["$line" -ge 80 ]; then echo "partition pleine" > /tmp/result
else echo "no soucis" > /tmp/nosoucis.txt
fi
done < /tmp/usepvert.txt
/root]# sh toto.sh
23
84
90
9
92
83
86
86
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
toto.sh: [: -ge: unary operator expected
voila ce que je tape : les valeurs numeriques sont le resultat du cat /tmp/usepvert.txt -
le script en definitif est destiné a "scanner" les partitions sur mon serveur et m'envoyé une alerte mail si une des partitions depasse les 90% d'espace occupé en me nommant la partition impliquée , et ne m'envoie rien si aucune partition n'est saturée
-
Il faut un espace autour des crochets :
if ["$line" -ge 80 ] <= MAUVAIS if [ "$line" -ge 80 ] <= BON
;-))
-
root]# sh toto.sh
23
84
90
9
92
83
86
86
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
toto.sh: [: : integer expression expected
j'ai modifié cette ligne en fonction de ce que tu m'as dis :
if [ "$line" -ge 80 ] ; then echo "partition pleine" > /tmp/result
else echo "no soucis" > /tmp/nosoucis.txt -
On peut voir à quoi ressemble le fichier "usepvert.txt " avec un :
cat -A /tmp/usepvert.txt
-
[root]# cat -A usepvert.txt
23$
84$
90$
9$
92$
83$
86$
86$
bien joué , mais d'ou viennent ces $ ?????? -
[root /tmp]# cat -A usepvert.txt
23$
84$
90$
9$
92$
83$
86$
86$
[root /tmp]#
voila le resultat complet , sinon as tu une autre methode pour mon script saturation de disque (plus propre) car je me rends compte que la seule "belle" commande dans mon script c'est la tienne -
Essaie ça :
df -H | awk '/^\// {if($5>=90) print "Attention "$1 " seuil critique dépassé : " $5 }'
-
ta commande est geniale , mais incomprehensible pour un débutant comme moi , merci beaucoup pour ton aide et ta patience .
Une dernière question cependant , pourrais tu me conseiller un voir plusieurs livre concernant ces scripts car je vais être amené à en écrire de plus en plus
merci encore -
je vais chercher à quoi correspondent les differents parametres , mais c'est vrai que comme je l'ai précisé au début de mon post , je suis débutant et on ne peut pas dire que awk soit très accessible à mon niveau , je me rends bien compte que de maitriser cet outil est très important , je vais donc m'y employer . Maintenant si quelqu'un peut m'expliquer ce que fais cette commande je l'en remercie bien évidemment .
cordialement -
/^\//
Critère de condition (toujours compris entre / et /)
Si la ligne commence (^) par un slash (/) (ici on le protège "\/" pour ne pas le confondre avec les caractères servant pour les critères)
if($5>=90)
Si le champs 5 ($5) est supérieur ou égal (>=) à 90
print "Attention "$1 " seuil critique dépassé : " $5
On imprime à l'écran "Attention..." avec les champs qui vont bien.
;-))
-
Encore une fois merci , je vous souhaite une bonne fin de journée et j'espère pouvoir répondre comme vous un jour à ce genre de questions
Cordialement