Script shell

Résolu/Fermé
mithandrir - 16 oct. 2009 à 11:35
 mithandrir - 16 oct. 2009 à 15:37
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
A voir également:

17 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 11:46
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$

;-))
2
Kharec Messages postés 4143 Date d'inscription dimanche 20 avril 2008 Statut Contributeur Dernière intervention 8 mai 2011 509
16 oct. 2009 à 11:40
Salut,

Tu peux le faire à grand coup de if et de < ou > mais c'est pas super...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 oct. 2009 à 12:17
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



0
merci beaucoup , j'ai juste un petit message d'erreur

[: -ge: unary operator expected à la fin du script

une idée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 13:33
Affiches-nous ce que tu tapes...
0
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
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 13:46
Il faut un espace autour des crochets :

if ["$line" -ge 80 ] <= MAUVAIS

if [ "$line" -ge 80 ] <= BON

;-))
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 14:13
On peut voir à quoi ressemble le fichier "usepvert.txt " avec un :

cat -A /tmp/usepvert.txt
0
[root]# cat -A usepvert.txt
23$
84$
90$
9$
92$
83$
86$
86$

bien joué , mais d'ou viennent ces $ ??????
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 14:28
Ce n'est rien, en fait le paramètre "-A" de la commande "cat" demande d'afficher les caractères dits non-imprimable comme c'est le cas avec le caractère "$" signifiant une fin de ligne.

Par contre tu m'as tout affiché de ton fichier ? Il n'y a pas de ligne vides à la fin ?
0
[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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 15:05
Essaie ça :

df -H | awk '/^\// {if($5>=90) print "Attention "$1 " seuil critique dépassé : " $5 }'

0
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
0
Kharec Messages postés 4143 Date d'inscription dimanche 20 avril 2008 Statut Contributeur Dernière intervention 8 mai 2011 509
16 oct. 2009 à 15:20
Si tu ne comprend pas la commande, je ne pense pas que l'aide a été efficace (sans vouloir être mesquin ou désobligeant). Je pense que l'on devrait t'expliquer la commande pour que tu ressortes enrichis de cette expérience.

Ce n'est que mon humble avis.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > Kharec Messages postés 4143 Date d'inscription dimanche 20 avril 2008 Statut Contributeur Dernière intervention 8 mai 2011
16 oct. 2009 à 15:33
Bien au contraire il très bénéfique de détailler les commandes. On a beau essayer de comprendre par soi même bien souvent, on ne comprend pas toujours tout. Là est tout la différence, on peut saisir une syntaxe dans son ensemble mais ne pas voir le détail qui fait toute la différence.
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2009 à 15:31
/^\//
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.

;-))
0
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
0