# BASH parcours de variable

**URL:** <https://www.debian-fr.org/t/bash-parcours-de-variable/33171>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171 "2016-02-21T02:54:31Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/1 "2016-02-21T02:54:31Z")

</div>

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

```auto
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

```auto
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 😒

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/2 "2016-02-21T02:54:31Z")

</div>

Essai avec des guillemets: “${i}”

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/3 "2016-02-21T02:54:32Z")

</div>

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](https://www.debian-fr.org/uploads/default/original/1X/0287f377b0e103e172422ffbbe8c639fd3e12c9e.gif "vertige")

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/4 "2016-02-21T02:54:42Z")

</div>

je bascule ce fil dans “programmation”

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/5 "2016-02-21T02:54:42Z")

</div>

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 empty`c’est à dire le quatrième élément du tableau est vide.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/6 "2016-02-21T02:54:45Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/7 "2016-02-21T02:54:50Z")

</div>

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=«&nbsp;valeur1&nbsp;»  
mavar2=«&nbsp;&nbsp;»  
mavar3=«&nbsp;valeur3&nbsp;»

$ . ./fichier.conf  
$ nomsVar=( mavar1 mavar2 mavar3 )  
$ for nom in «&nbsp;${nomsVar[@]}&nbsp;»

> do [-z «&nbsp;${!nom}&nbsp;»] && echo «&nbsp;$nom est vide&nbsp;» || echo «&nbsp;${!nom}&nbsp;»  
> done  
> valeur1  
> mavar2 est vide  
> valeur3[/code]

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/bash-parcours-de-variable/33171/8 "2016-02-21T02:54:58Z")

</div>

héhé !!  
Il manquait le ! ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")

```auto
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](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")
