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 :
- var1=il a crié \"assez\" mais cela ne suffisait pas
- var2='il a crié "assez" mais cela ne suffisait pas'
- 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 :
- SATUS_ONDULEUR="upsc 1150@172.20.2.1 | grep 'ups.status' | cut -d' ' -f2"
|
hppp a écrit :
Code :
- #!/bin/bash
- STATUS_ONDULEUR="upsc 1150@172.20.2.1 | grep "ups.status" | cut -d" " -f2 "
- if [$STATUS_ONDULEUR=OB];
- then
- echo "marche pas"
- fi;
- else
- then
- echo "marche"
- 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 :
- #!/bin/sh
- rm -f /tmp; status=$?
- if test $status -eq 0
- then
- echo "/tmp a bien été effacé"
- else
- echo "/tmp n'a pas pu être effacé"
- 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 :
- 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 :
- 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 :
- if ...
- then
- ...
- else
- ...
- fi
|
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.