BASH parcours de variable

Bonjour,

Dans un script Bash je voudrais tester X Variables :
1- Si la variable existe
2- Si la variable à une valeur d’attribué

Pour voir si la variable est vide j’utilise

if [ -z ${mavar1} ] ; then
echo ${mavar} is empty
fi

Je n’arrive pas à obtenir le même résultat dans une boucle de test du style

tab_variable=(mavar1 mavar2 mavarX)

for i in ${tab_variable{*]}
do
if [ -z ${i} ] ; then
echo ${i} is empty
fi
done

Avez-vous une idée :unamused:

Essai avec des guillemets: “${i}”

J’ai déjà essayé avec ou sans cela reste la même chose…

Même $i ne passe pas !

En fait j’ai l’impression qu’il n’évalu pas correctement les variables du tableau :119

je bascule ce fil dans “programmation”

salut

il va falloir relire le man pour les détails

je te montre :[code]monTableau=( foo bar ‘bar baz’ ‘’ )
for i in ${monTableau[*]}; do echo “$i”; done
foo
bar
bar
baz

for i in “${monTableau[*]}”; do echo “$i”; done
foo bar bar baz
for i in “${monTableau[@]}”; do echo “$i”; done
foo
bar
bar baz

[/code]je fais un test :for i in "${monTableau[@]}"; do [ -z "$i" ] && echo "$i"; done is empty
mais je suppose que tu veux faire ça :for i in "${!monTableau[@]}"; do [ -z "${monTableau[i]}" ] && echo "monTableau[$i] is empty"; done monTableau[3] is emptyc’est à dire le quatrième élément du tableau est vide.

Bonjour,

En fait cela ne fonctionne pas !

Le test empty sur des variables ne fonctionne pas…

Dans mon script, je charge et lit un fichier de conf. Dans ce fichier de conf il y a des variables à initialiser manuellement:
mavar1="valeur1"
mavar2="valeur2"
etc …

Lors du lancement du script, je voudrais tester si certaine des variables sont remplies dans le fichier de conf (!Vide)

Donc je passe le nom des variables “requises” dans un tableau et ensuite lancer une boucle de test pour vérifier si la variable n’est pas vide…

petit à petit, on va tout savoir, et on va pouvoir ne pas répondre à côté.

Il faut utiliser l’indirection : ${!nom}

[code]$ cat fichier.conf
mavar1=“valeur1"
mavar2=”"
mavar3=“valeur3”

$ . ./fichier.conf
$ nomsVar=( mavar1 mavar2 mavar3 )
$ for nom in “${nomsVar[@]}”

do [ -z “${!nom}” ] && echo “$nom est vide” || echo "${!nom}"
done
valeur1
mavar2 est vide
valeur3[/code]

héhé !!
Il manquait le ! :041

montableau=(var1 var2 var3)

for i in "${montableau[@]}";
      do
          if [ -z "${!i}" ] ; then
              echo "$i is empty"
          fi
     done

Merci Watael pour ton aide :023