Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. hmm

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

Watael a écrit :

salut,

l'intégralité du script est quelque part ? la sortie ne correspond pas au code. hmm

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 lol roll hmm


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

Beuhlet_Reseau a écrit :
Watael a écrit :

salut,

l'intégralité du script est quelque part ? la sortie ne correspond pas au code. hmm

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 lol roll hmm


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