[Shell] test avec une variable

test avec une variable [Shell] - Shell/Batch - Programmation

Marsh Posté le 10-05-2008 à 10:29:46    

Bonjour
 
Je suis en train de faire un petit script pour tester la presence ou non d'un service.
au debut je recupere directement le PID de mon process.
bien entendu si il est pas la, la variable sera donc vide.
 
mon problème se situe au niveau du test de la variable.
j'ai essayer ca :

Code :
  1. if ("$var1" != "" )
  2. then
  3. ...


j'ai essayer avec un -ne aussi, mais a chaque tentative j'ai un :
./menu.sh: line 3: xxxxx : commande introuvable
(xxxxx = le PID, car actuellement mon process est present)


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 10-05-2008 à 10:29:46   

Reply

Marsh Posté le 10-05-2008 à 14:38:32    

if [ -n "$var" ]
then
   echo "Process found"
fi


 
Jean-Pierre.


---------------
Jean Pierre.
Reply

Marsh Posté le 10-05-2008 à 15:12:57    

-n ? ca correspond a quoi ?
 
sinon effectivement ca marche.
 
et si je voulais tester la chaine toto dans ma variable je faisait comment ?

Message cité 1 fois
Message édité par chico008 le 10-05-2008 à 18:26:49

---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 10-05-2008 à 23:55:07    

chico008 a écrit :

-n ? ca correspond a quoi ?
 
sinon effectivement ca marche.
 
et si je voulais tester la chaine toto dans ma variable je faisait comment ?


-n permet de tester qu'une chaîne est non vide et -z qu'elle ne l'est.
 
Pour tester si une chaîne est égale à une valeur :

if [ "$var1" = "toto" ]

Si le test se fait sur des nombres on utilise -eq -gt -ge -lt -le, par exemple :

if [ "$var1" -eq 5 ]


 
Jean-Pierre.
 

Reply

Marsh Posté le 11-05-2008 à 09:55:07    

d'accord, merci pour tes explications ;)


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 13-05-2008 à 10:13:30    

L'autre possibilité si tu veux vraiment utiliser -ne, c'est de faire :


if [ "x$var" -ne "x" ]
then
    ...


Le "x" permet d'éviter l'erreur que tu as quand $var est vide. Evidemment tu peux utiliser n'importe quelle charactère ou chaine à la place de "x". Le problème que tu avais c'est que si $var est vide, le shell voit l'expression if [ -ne ], qui n'est évidemment pas valide. Avec le "x" il verra if [ x -ne x ], qui est valide.
 
Mais bien sûr -n ou -z sont mieux adaptés à ce que tu veux faire.

Reply

Marsh Posté le 13-05-2008 à 20:13:32    

matafan a écrit :

L'autre possibilité si tu veux vraiment utiliser -ne, c'est de faire :


if [ "x$var" -ne "x" ]
then
    ...


Le "x" permet d'éviter l'erreur que tu as quand $var est vide. Evidemment tu peux utiliser n'importe quelle charactère ou chaine à la place de "x". Le problème que tu avais c'est que si $var est vide, le shell voit l'expression if [ -ne ], qui n'est évidemment pas valide. Avec le "x" il verra if [ x -ne x ], qui est valide.


Tout d'abord le "-ne" est fait pour les numériques et je serais étonné qu'il accepte pour de l'alphanum. Par ailleurs, il y a plus simple

if [ "$var" != "" ]
then
    ...


Grace aux guillemets, même si var est vide le shell verra if [ "" != "" ] qui est tout aussi valide. Personnellement je préconise de toujours utiliser les guillemets doubles quand on teste de l'alphanum...


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

Marsh Posté le 14-05-2008 à 11:30:08    

Désolé j'étais à côté de la plaque.
 
En fait le problème c'est juste qu'il mettait des () au lieux de [].

Reply

Marsh Posté le 14-05-2008 à 11:31:36    

ouais.
je fait pas mal de PHP, c'est derivé du C, et comme linux c'est du C aussi, je pensait faire pareil, bah non.
au moin maintenant je saurais.
Merci pour votre aide et vos explications ;)


---------------
Serveur HFR - OpenTTD
Reply

Sujets relatifs:

Leave a Replay

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