Script shell
Résolu/Fermé
A voir également:
- Script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
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 897
16 oct. 2009 à 11:46
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$
;-))
Kharec
Messages postés
4146
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
509
16 oct. 2009 à 11:40
16 oct. 2009 à 11:40
Salut,
Tu peux le faire à grand coup de if et de < ou > mais c'est pas super...
Tu peux le faire à grand coup de if et de < ou > mais c'est pas super...
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 569
16 oct. 2009 à 12:17
16 oct. 2009 à 12:17
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 oct. 2009 à 13:33
16 oct. 2009 à 13:33
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
#!/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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 oct. 2009 à 13:46
16 oct. 2009 à 13:46
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 oct. 2009 à 14:13
16 oct. 2009 à 14:13
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 $ ??????
23$
84$
90$
9$
92$
83$
86$
86$
bien joué , mais d'ou viennent ces $ ??????
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 oct. 2009 à 14:28
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 ?
Par contre tu m'as tout affiché de ton fichier ? Il n'y a pas de ligne vides à la fin ?
[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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 oct. 2009 à 15:05
16 oct. 2009 à 15:05
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
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
Kharec
Messages postés
4146
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
509
16 oct. 2009 à 15:20
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.
Ce n'est que mon humble avis.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
Kharec
Messages postés
4146
Date d'inscription
dimanche 20 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2011
16 oct. 2009 à 15:33
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.
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 oct. 2009 à 15:31
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.
;-))
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.
;-))