[bash] tester si une variable (multivaluée) est vide

tester si une variable (multivaluée) est vide [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 19-02-2011 à 11:12:20    

Hello,
 
J'ai un problème de test de variable dans bash qui devrait être tout bidon mais qui va pas comme je veux...  :o  
 
Ma variable peut être, selon les cas, multivaluée ou non. Des fois c'est de la forme :

Code :
  1. aaa
  2. bbb
  3. ccc


et des fois :

Code :
  1. aaa


voire, quand ça plante :o , vide...
 
Normalement, un test classique fonctionne :

Code :
  1. if [ ! $mavariable ]


ou alors :

Code :
  1. if [ -z $mavariable ]


 
Ça marche très bien si la variable est vide ou monovaluée mais dès qu'elle est multivaluée, ça me met une erreur puisque l'argument n'est pas de la forme attendue. C'est pas bloquant mais c'est pas propre... Je ne trouve pas de solution à ce problème dans les différents tuto que j'ai lu (par ex http://tldp.org/LDP/abs/html/).
 
J'ai aussi essayé :

Code :
  1. if ["x$mavariable" == "x" ]


ça marche pas non plus (c'était évident mais bon... faut tester quand même  :whistle: )
 
un "for i" sur la variable n'est pas sensible au problème de multivaluation mais si elle est vide on n'entre tout simplement pas dans la boucle donc ça ne marche pas non plus.
 
Je suis sur que la solution est toute simple mais je suis pas développeur (je suis même pas informaticien, du moins pas de formation...  :o ) du coup je suis à court d'idées sur ce truc. Quelqu'un aurait un solution?
Merci :)  
 
a+ :hello:


---------------
J'ai cherché à chercher mais je n'ai rien pu trouver et pourtant, j'avais trouvé.
Reply

Marsh Posté le 19-02-2011 à 11:12:20   

Reply

Marsh Posté le 19-02-2011 à 17:49:46    

Juste pour préciser, j'ai trouvé une solution moche mais qui marche :
 

Code :
  1. if [ `echo $mavariable | grep [a-z] | wc -l` -eq 0 ]; then
  2. echo "$mavariable est vide"
  3. fi


 
C'est moche pour deux raisons :

  • ça renvoie 1 que j'ai une ou 500 valeurs dans ma variable
  • devoir faire trois commandes pour obtenir la valeur à tester c'est pas très optimisé...  :sweat:  


Si il y a mieux (ce dont je ne doute pas une seconde  :D ) je suis preneur ;)
 
 :hello:


---------------
J'ai cherché à chercher mais je n'ai rien pu trouver et pourtant, j'avais trouvé.
Reply

Marsh Posté le 24-03-2011 à 16:49:00    

Un truc du genre :

VAR=$(grep -c [[:alpha:]]<<<${mavariable})
 
case ${VAR} in
    0 ) echo "$mavariable est vide" ;;
    * ) echo "$mavariable comporte ${VAR} valeurs." ;;
esac


---------------
La réponse est 42
Reply

Marsh Posté le 25-03-2011 à 15:00:05    

Personnellement je comprends pas vraiment ce que signifie une variable "multivaluée".
Une variable est vide ou pas.. Tu parles d'une variable sur plusieurs lignes ? Dans ce cas ce n'est qu'un concept puisqu'un retour à la ligne est finalement un caractère...
 
D'ailleurs j'ai tapé variable multivaluée sur google pour satisfaire ma soif inextinguible de connaissances, et on tombe sur ce topic...
 
Pour ma part cà me parait évident que le test suivant  
if [ ! -z "$ma_variable" ];
fonctionne.
Peux tu me donner le message d'erreur ?
 
J'ai essayé d'illustrer un peu ton test en donnant à une variable la valeur d'un fichier multiligne, mais je ne pense pas que c'est ce que tu appelles une variable "multivaluée".
 

Code :
  1. #!/bin/ksh
  2. myvar=$(cat /etc/passwd);
  3. [ -z "$myvar" ] && echo "je suis vide";
  4. [ ! -z "$myvar" ] && echo "je suis plein";


 

Code :
  1. # ./test.ksh
  2. je suis plein


 

Reply

Marsh Posté le 25-03-2011 à 15:01:22    

omg je me suis fait owned par le déterrage de twocats

Reply

Sujets relatifs:

Leave a Replay

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