#1 Le 08/06/2015, à 14:50
- Beuhlet_Reseau
Bash partie de mon script incorrect - [: too many arguments
Bonjour,
Je viens vers vous car après plusieurs modifications non fonctionnelles, une partie de mon script reste en erreur lorsque je le déroule.
La partie est concerné se situe après avoir définie certains variables :
exemple :
name=e1000g0
speed=1000
duplex=full
A partir de ces variables; afin de sortir un message d'erreur cohérent je les utiles comme suit :
if [ $speed = 0 ]
then
echo "$PF;$0;$serveur;Warning;L'interface $name est en état DOWN et ne reçoit pas de traffic" >> check_interfaces
else
if [ $duplex = half ]
then
duplex="HALF DUPLEX"
echo "$PF;$0;$serveur;Warning;L'interface $name est en état UP et est en mode $duplex" >> check_interfaces
else
if [ $duplex = full ]
then
duplex="FULL DUPLEX"
echo "$PF;$0;$serveur;OK;L'interface $name est en état UP, et en mode $duplex" >> check_interfaces
fi
fi
fi
En théorie j'aimerais que cela me sorte un résultat du style :
Si la vitesse $speed est égale à 0 alors on affiche "L'interface est en état Down et ne reçoit pas de traffic"
sinon
Si le $duplex est égal à half alors on affiche "L'interface est UP et est en HalfDuplex
Sinon si le $duplex est égal à full alors on affiche "L'interface est UP et est en Full Duplex"
Je ne sais pas si j'ai été assez claire, je vous remercie de votre aide. Au passage lorsque je lance mon script il me retourne toujours la même erreur :
PF;.interface;serveur;Warning;L'interface e1000g0 est en état DOWN et ne reçoit pas de traffic
PF;.interface;serveur;Warning;L'interface e1000g1 est en état DOWN et ne reçoit pas de traffic
PF;.interface;serveur;Warning;L'interface e1000g2 est en état DOWN et ne reçoit pas de traffic
PF;.interface;serveur;Warning;L'interface e1000g3 est en état DOWN et ne reçoit pas de traffic
Et voila un petit extrait de comment le script est analysé (set -x) :
+ name=e1000g5
++ cat /result/interface/interface_serveur_e1000g5
++ awk '-F ' '{print $5}'
+ speed=100
++ cat /result/interface/interface_serveur_e1000g5
++ awk '-F ' '{print $8}'
+ duplex=full
+ '[' =1 ']'
+ up=UP
+ '[' '100!=0' ']'
+ echo 'PF;./interface;serveur;Warning;L'\''interface e1000g5 est en état DOWN et ne reçoit pas de traffic'
Dernière modification par Beuhlet_Reseau (Le 09/06/2015, à 16:25)
L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).
Hors ligne
#2 Le 08/06/2015, à 15:00
- Watael
Re : Bash partie de mon script incorrect - [: too many arguments
salut,
l'intégralité du script est quelque part ? la sortie ne correspond pas au code.
trois remarques :
- les données numériques doivent être comparées avec un opérateur arithmétique.
- les variables non-numériques doivent toujours être entre guillemets dans les tests.
- sur le forum, utilise les balises CODE !
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 08/06/2015, à 15:16
- Beuhlet_Reseau
Re : Bash partie de mon script incorrect - [: too many arguments
salut,
l'intégralité du script est quelque part ? la sortie ne correspond pas au code.
trois remarques :
- les données numériques doivent être comparées avec un opérateur arithmétique.
- les variables non-numériques doivent toujours être entre guillemets dans les tests.
- sur le forum, utilise les balises CODE !
Je n'ai malheureusement rien compris
L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).
Hors ligne
#4 Le 09/06/2015, à 10:23
- Beuhlet_Reseau
Re : Bash partie de mon script incorrect - [: too many arguments
En tout cas en sachant que :
- $speed=1000
- Premier Test : Si le $speed = 0 alors message d'erreur (pas de traffic réseau sur l'interface)
Sinon (donc en gros si elle est pas égal à 0 elle est forcément plus grande) ...
...et après le script se déroule normalement après sa je pense.
Mais pourquoi bloque t-il à (en gros la valeur est toujours comprise par 0 donc message erreur cité plus haut ):
if [ $speed = 0 ]
then
L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).
Hors ligne
#5 Le 09/06/2015, à 10:31
- Nhadroj
Re : Bash partie de mon script incorrect - [: too many arguments
Watael a écrit :salut,
l'intégralité du script est quelque part ? la sortie ne correspond pas au code.
trois remarques :
- les données numériques doivent être comparées avec un opérateur arithmétique.
- les variables non-numériques doivent toujours être entre guillemets dans les tests.
- sur le forum, utilise les balises CODE !Je n'ai malheureusement rien compris
1 les données numériques doivent être comparées avec un opérateur arithmétique. ==> pour tester une égalité utilise : -eq et non "="
2 les variables non-numériques doivent toujours être entre guillemets dans les tests. ==> Quand tu fais tes tests (if), met les chaînes de caractère entre guillemet, par exemple : "full" et non full, "half" et non half..
3 sur le forum, utilise les balises CODE ! ==>
mon code mon code mon code
est plus lisible pour du code que mon code mon code mon code
Nhadroj
Dernière modification par Nhadroj (Le 09/06/2015, à 10:31)
Hors ligne
#6 Le 09/06/2015, à 10:49
- Beuhlet_Reseau
Re : Bash partie de mon script incorrect - [: too many arguments
D'accord merci je vais essayer ! Aussi y a t-il une vrai différence entre "=" et "==" ?
Bizarrement quand je fais un rm par exemple
rm -rf host*
(Disons qu'il y a 50 hosts, il supprime les 50 mais il affiche dans la console too many arguments
)
L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).
Hors ligne
#7 Le 09/06/2015, à 13:05
- Beuhlet_Reseau
Re : Bash partie de mon script incorrect - [: too many arguments
Tout fonctionne mais après pour nettoyer tout les fichiers utilisés pendant le script (genre tmp, fic ect...) je fais un rm tmp* par exemple mais sur la console le message line 159: [: too many arguments cela 3 fois correspondant au 3 rm que je fais dans le script.
Y a t-il un moyen d'empêcher ce message ou de bloquer ce type de message sur la console ? (Sur la console je n'affiche seulement que mon fichier de résultat à la fin sinon je ne veux rien du tout dessus)
L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).
Hors ligne