Condition avec commande systeme

Condition avec commande systeme - Shell/Batch - Programmation

Marsh Posté le 04-04-2009 à 13:52:10    

salut
 
Je voudrais me faire un script et vérifier l'état de mon onduleur.
Pour ça j'ai déjà fait ça:
 

Code :
  1. #!/bin/bash
  2. STATUS_ONDULEUR="upsc 1150@172.20.2.1 | grep "ups.status" | cut -d" " -f2 "
  3. if [$STATUS_ONDULEUR=OB];
  4. then
  5. echo "marche pas"
  6. fi;
  7. else
  8. then
  9. echo "marche"
  10. fi;


 
Mais le problème c'est comment mettre en variable car j'ai déjà des " dans ma commande. Merci de votre aide

Reply

Marsh Posté le 04-04-2009 à 13:52:10   

Reply

Marsh Posté le 04-04-2009 à 18:02:01    

hppp a écrit :

Mais le problème c'est comment mettre en variable car j'ai déjà des " dans ma commande. Merci de votre aide


Tu veux dire "comment mettre des guillemets dans une variable" ? Utiliser les caractères spéciaux

Code :
  1. var1=il a crié \"assez\" mais cela ne suffisait pas
  2. var2='il a crié "assez" mais cela ne suffisait pas'
  3. var3="il a crié \"assez\" mais cela ne suffisait pas"


 
Mais comme les commandes elle-mêmes acceptent aussi les différentes syntaxes, tu n'es pas obligé d'utiliser les guillemets dans tes commandes grep et cut ce qui te permet d'utiliser les guillemets pour ta variable

Code :
  1. SATUS_ONDULEUR="upsc 1150@172.20.2.1 | grep 'ups.status' | cut -d' ' -f2"


 

hppp a écrit :


Code :
  1. #!/bin/bash
  2. STATUS_ONDULEUR="upsc 1150@172.20.2.1 | grep "ups.status" | cut -d" " -f2 "
  3. if [$STATUS_ONDULEUR=OB];
  4. then
  5. echo "marche pas"
  6. fi;
  7. else
  8. then
  9. echo "marche"
  10. fi;



Gros problème dans ce code
1) tu confonds "status" et "affichage". Le status (état) c'est le code de retour d'une commande. Il correspond à une valeur numérique conventionnellement mise à 0 pour indiquer que tout s'est bien passé et pas 0 s'il y a eu un problème. Et il se récupère dans la variable $?
Exemple

Code :
  1. #!/bin/sh
  2. rm -f /tmp; status=$?
  3. if test $status -eq 0
  4. then
  5.     echo "/tmp a bien été effacé"
  6. else
  7.     echo "/tmp n'a pas pu être effacé"
  8. fi


 
Ici, visiblement, ta commande upsc affichera "OB" et c'est cet affichage que tu veux récupérer. Dans ce cas, il faut utiliser les backquottes pour demander a récupérer l'affichage. Et là encore plus besoin de guillemets ce qui te permet de les utiliser dans tes commandes grep et cut

Code :
  1. resultat=`upsc 1150@172.20.2.1 | grep "ups.status" | cut -d" " -f2`


 
2) le shell est très light comme interpréteur (pour préserver un peu de rapidité) => conséquence => c'est à toi d'écrire bien distinctement les choses. Et si t'écris "[$STATUS_ONDULEUR=OB]", le shell ne saura pas que tu veux comparer des éléments. Faut mettre des espaces pour séparer les éléments. Et des guillemets pour éviter que l'expression soit bancale si la variable est vide

Code :
  1. if [ "$resultat" = "OB" ];


 
3) if ... then ... fi else then ... fi => difficilement compréhensible par moi. Comment veux-tu que le shell comprenne ce que tu veux ?

Code :
  1. if ...
  2. then
  3.    ...
  4. else
  5.    ...
  6. fi


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-04-2009 à 10:50:14    

ok merci beaucoup d'avoir pris du temps.
Mais je ne comprend pas pourquoi je ne peut pas utiliser STATUS_ONDULEUR comme variable? c'est à cause des majuscules?

Reply

Marsh Posté le 05-04-2009 à 13:54:35    

hppp a écrit :

Mais je ne comprend pas pourquoi je ne peut pas utiliser STATUS_ONDULEUR comme variable? c'est à cause des majuscules?


Arf non, t'as pas compris. Tu peux nommer ta variable comme t'en as envie, que ce soit "STATUS_ONDULEUR" ou "trouloulou".
Mais généralement on donne aux variables des noms en rapport avec l'info qu'elles contiennent. Ta variable ne récupère pas le status (le code retour) du programme appelé, elle récupère un résultat affiché par ledit programme. C'est donc (à mon sens) plus élégant de la nommer "result".
Concernant l'emploi des majuscules effectivement on préfère les réserver aux variables systèmes "HOME", "PATH", "LOGNAME".
Mon habitude qui n'engage que moi est généralement de mettre les variables en 2 ou 3 mots séparés par un "_". Exemple nb_lig_fic => cette variable récupèrera très probablement le nombre de lignes de mon fichier et d'autres la nommeront plutôt "nbLigFic"...


Message édité par Sve@r le 05-04-2009 à 13:56:13

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-04-2009 à 15:50:17    

OK, mais en faite cette commande récupère bien le statu de mon onduleur pour savoir si il y a du courant ou pas.
Merci beaucoup

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed