Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1418 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Condition avec commande systeme

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Condition avec commande systeme

n°1869472
hppp
Serveur@home
Posté le 04-04-2009 à 13:52:10  profilanswer
 

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

mood
Publicité
Posté le 04-04-2009 à 13:52:10  profilanswer
 

n°1869529
Sve@r
Posté le 04-04-2009 à 18:02:01  profilanswer
 

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.
n°1869618
hppp
Serveur@home
Posté le 05-04-2009 à 10:50:14  profilanswer
 

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?

n°1869658
Sve@r
Posté le 05-04-2009 à 13:54:35  profilanswer
 

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.
n°1869683
hppp
Serveur@home
Posté le 05-04-2009 à 15:50:17  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Condition avec commande systeme

 

Sujets relatifs
[VBA] Boutons de commande qui se déplacent quand j'imprime[pataper] package et main et eclipse et ligne de commande
Usage ressources système sur VPS[PHP 5] base de données mysql : commande 'UPDATE' ?
Systeme de sécurité java 2Quelle est la commande .bat qui récupère la taille d'un disque dur ?
randomize ? ou condition foireuseFaire une passerelle entre un systeme d'information et un site web
Faire une passerelle entre un systeme d'information et un site webexecuter un programme en une seule ligne de commande
Plus de sujets relatifs à : Condition avec commande systeme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR