Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1109 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1267068
Rocks
HTTP 418
Posté le 19-02-2011 à 11:12:20  profilanswer
 

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é.
mood
Publicité
Posté le 19-02-2011 à 11:12:20  profilanswer
 

n°1267101
Rocks
HTTP 418
Posté le 19-02-2011 à 17:49:46  profilanswer
 

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é.
n°1271404
twocats
Posté le 24-03-2011 à 16:49:00  profilanswer
 

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
n°1271550
bichtoubar​d
Posté le 25-03-2011 à 15:00:05  profilanswer
 

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


 

n°1271551
bichtoubar​d
Posté le 25-03-2011 à 15:01:22  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
[BASH] Récupérer un morceau de variable...[BASH] - Variables et substitution -Resolu
[Linux - Bash] organiser un groupe de lettres par ordre ALPHACrée une variable d'environnement permanentes
[REGLE] bash: ./jext: Permission non accordée[bash-expect] Redirection de port automatique avec SSH
Script Bash: cut/sed?Script Bash : Gestion des erreurs
Plus de sujets relatifs à : [bash] tester si une variable (multivaluée) est vide


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR