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
A voir également:
- Script shell
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
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,
D'autre versions un peu plus courtes ;-)
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
[: -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
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
#!/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
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
[root]# cat -A usepvert.txt
23$
84$
90$
9$
92$
83$
86$
86$
bien joué , mais d'ou viennent ces $ ??????
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
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
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
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
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.
;-))
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.
;-))