#1 Le 08/03/2013, à 12:32
- via78
[Resolu]probleme de comparaison de variable dans un IF
bonjour voici mon code :
VAR=`status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?`
#echo $VAR
#echo $VAR |grep not | cut -d' ' -f2,3
VAR=`echo $VAR |grep not | cut -d' ' -f2,3`
echo $VAR
TEST="is not"
echo $TEST
if [ test $VAR = $TEST ]
then echo "1"
else echo "2"
fi
et voici la replonse de mon terminal
is not
is not
[: 186: test: unexpected operator
2
au depart je veux executer des commandes si la commande "status" me renvoi l'information que mon processus "is not running ... failed!"
donc je veux verifier si elle est = NULL ou non => je n'y arrive pas
donc je test une comparaison de valeur type != "is not" => je n'y arrive pas
alors j'en suis là comparaison de varialble et ca ne fonctionne toujours pas !!
merci de votre aide
Via
Dernière modification par via78 (Le 08/03/2013, à 15:05)
Hors ligne
#2 Le 08/03/2013, à 12:56
- pingouinux
Re : [Resolu]probleme de comparaison de variable dans un IF
Bonjour,
Peut-être un truc comme ça :
if status_of_proc "$DAEMON" "$NAME"
then echo "1"
else echo "2"
fi
Hors ligne
#3 Le 08/03/2013, à 13:11
- jamesbad000
Re : [Resolu]probleme de comparaison de variable dans un IF
Bonjour,
il faut choisir entre
if test $VAR -eq $TEST; then
ou
if [ $VAR = $TEST ]; then
de plus comme tes variables contiennent des espaces ajouter des délimiteurs me semble nécessaire (en fait maintenant je ne me pose plus la question j'en met systématiquement).
"$VAR" = "$TEST"
Edit: pour test la nullité c'est -z :
if [ -z $VAR ]; then
Dernière modification par jamesbad000 (Le 08/03/2013, à 14:33)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#4 Le 08/03/2013, à 13:14
- akaoni
Re : [Resolu]probleme de comparaison de variable dans un IF
La comparaison des strings est == ou !=
if [ $VAR == $TEST ]
then echo "1"
else echo "2
fi
Par contre ca risque de planter si les variables sont vides.
Pour éviter ce pb j'utilise bash avec des ${VAR:=NULL} qui met NULL dans la variable si elle est vide.
Hors ligne
#5 Le 08/03/2013, à 13:21
- pingouinux
Re : [Resolu]probleme de comparaison de variable dans un IF
La comparaison des strings est == ou !=
Ce n'est pas obligatoire :
$ A=a; B=b; [ "$A" = "$B" ] && echo oui || echo non
non
$ A=a; B=a; [ "$A" = "$B" ] && echo oui || echo non
oui
Hors ligne
#6 Le 08/03/2013, à 13:23
- tiramiseb
Re : [Resolu]probleme de comparaison de variable dans un IF
il faut choisir entre
if test $VAR -eq $TEST; then
ou
if [ $VAR = $TEST ]; then
Faux. "[" n'est qu'un alias pour "test".
Par ailleurs, "-eq" compare des nombres alors que "=" compare des chaînes.
de plus comme tes variables contiennent des espaces ajouter des délimiteurs me semble nécessaire (en fait maintenant je ne me pose plus la question j'en met systématiquement).
Je plussoie fortement. Toujorus mettre des guillemets ça résoud des problèmes.
en principe il faut aussi un ; entre le if et le then
Il faut soit un retour à la ligne, soit un ";".
La comparaison des strings est == ou !=
Faux.
La comparaison de l'égalité de deux chaînes est bien "=" (cf la manpage de "test").
via78, pour mieux comprendre les problèmes rencontrés et les erreurs affichées, exécutes ton script avec l'option "-x" de sh ou de bash.
Exemple :
bash -x ton_script.sh
Par ailleurs, ton code semble inutilement compliqué.
Pour ma part je n'arrive pas à te suivre, vu que tu n'as donné qu'un extrait de code sans expliquer ce qu'il prend comme entrée, le contenu des variables, ce qu'il donne, ce que tu attends comme résultat, etc.
Ce que propose pingouinux semble sur la bonne voie ; en terme de scripts shell, je te conseille de prendre en compte ce qu'il écrit, il est très fort dans le domaine.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#7 Le 08/03/2013, à 14:24
- jamesbad000
Re : [Resolu]probleme de comparaison de variable dans un IF
Faux. "[" n'est qu'un alias pour "test".
D'ou l'interet de choisir entre une forme ou l'autre. je comprends pas la remarque.
En revanche le ; est superflux si le then est à la ligne, j'en conviens...
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#8 Le 08/03/2013, à 14:53
- tiramiseb
Re : [Resolu]probleme de comparaison de variable dans un IF
tiramiseb a écrit :Faux. "[" n'est qu'un alias pour "test".
D'ou l'interet de choisir entre une forme ou l'autre. je comprends pas la remarque.
Tu as indiqué qu'il faut choisir entre « if test $VAR -eq $TEST; then » et « if [ $VAR = $TEST ]; then », j'ai pour ma part compris que tu sous-entendais qu'avec "test" il faut utiliser "-eq" et avec "[" il faut utiliser "=", ce qui serait faux.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 08/03/2013, à 14:58
- via78
Re : [Resolu]probleme de comparaison de variable dans un IF
houuouuuuuuuuuuuu
je part manger, je me retournen et j'ai des reponses a decortiquer maintenant.
merci beaucoup, j'analyse, je cherche a comprendre et je reviens vers vous pour vous informer.
Via
Hors ligne
#10 Le 08/03/2013, à 15:04
- via78
Re : [Resolu]probleme de comparaison de variable dans un IF
voici la ligne qui est en rouge qui m'a debloqué, j'avais fait tous les teste mais pas pensé au espace que je teste YES merci.
Bonjour,
il faut choisir entre
if test $VAR -eq $TEST; then
ou
if [ $VAR = $TEST ]; then
de plus comme tes variables contiennent des espaces ajouter des délimiteurs me semble nécessaire (en fait maintenant je ne me pose plus la question j'en met systématiquement).
"$VAR" = "$TEST"Edit: pour test la nullité c'est -z :
if [ -z $VAR ]; then
merci aux autres parce que j'en etait a douté de mes commandes et j'ai la confirmation que m'a premiere ecriture etait la bonne (pas celle que j'ai posté puisque c'etait mon derniere essaie)
Via
Dernière modification par via78 (Le 08/03/2013, à 15:04)
Hors ligne
#11 Le 08/03/2013, à 15:08
- jamesbad000
Re : [Resolu]probleme de comparaison de variable dans un IF
Tu as indiqué qu'il faut choisir entre « if test $VAR -eq $TEST; then » et « if [ $VAR = $TEST ]; then », j'ai pour ma part compris que tu sous-entendais qu'avec "test" il faut utiliser "-eq" et avec "[" il faut utiliser "=", ce qui serait faux.
Ah, non je voulais surtout dire qu'il fallait éviter [ test ... ]
Mais tu as raison du coup mon exemple est confu
Dernière modification par jamesbad000 (Le 08/03/2013, à 15:10)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#12 Le 08/03/2013, à 15:11
- tiramiseb
Re : [Resolu]probleme de comparaison de variable dans un IF
via78: pour bien aborder tout ça, il faut comprendre comment un script shell se comporte.
Dans n'importe quel langage classique, quand tu fais appel à une variable, bah si la variable est vide soit il y a une erreur "variable inexistante" soit ça travaille sur une valeur nulle.
Avec un script shell ce n'est pas pareil.
Grosso modo, un script shell "remplace" les variables AVANT exécution de la ligne.
Donc si tu fais « test $VAR = $TEST » alors que "$VAR" et "$TEST" sont vide, tu obtiens : « test = », ce que tu es toi-même capable d'identifier comme une erreur
... alors que « test "$VAR" = "$TEST" » ça donne « test "" = "" », ce qui, syntaxiquement, est juste
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#13 Le 08/03/2013, à 15:12
- tiramiseb
Re : [Resolu]probleme de comparaison de variable dans un IF
Ah, non je voulais surtout dire qu'il fallait éviter [ test ... ]
Oh ptain j'avais même pas calculé son « [ test ... ] »... je devrais changer de lunettes (ou de neurones)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne