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/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

akaoni #4 a écrit :

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

jamesbad000 a écrit :

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.

jamesbad000 a écrit :

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. smile


jamesbad000 a écrit :

en principe il faut aussi un ; entre le if et le then

Il faut soit un retour à la ligne, soit un ";".

akaoni a écrit :

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.

Hors ligne

#7 Le 08/03/2013, à 14:24

jamesbad000

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

jamesbad000 a écrit :
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.

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.

jamesbad000 a écrit :

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

tiramiseb  a écrit :

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 smile
... alors que « test "$VAR" = "$TEST" » ça donne « test "" = "" », ce qui, syntaxiquement, est juste smile

Hors ligne

#13 Le 08/03/2013, à 15:12

tiramiseb

Re : [Resolu]probleme de comparaison de variable dans un IF

jamesbad000 a écrit :

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) lol

Hors ligne