# \[Resolu\] Bash :: lecture de fichier =\> dans variable

**URL:** <https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926 "2016-02-20T15:56:30Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/1 "2016-02-20T15:56:30Z")

</div>

Bonjour, all …

je cherche à récupèrer certaines infos d’un fichier pour les retourner dans une variable tableau !

```auto
#!/bin/sh
fichier=/etc/network/interfaces
I=0

for x in $(grep iface $fichier | awk '{print $2}')
do
        if ["$x" != "lo"]; then
                IFACE[$I]=$x;
                echo IFACE[${I}]' = '${IFACE[$I]};
                let I++;
        fi
done

for i in $IFACE
do
        echo ${IFACE[$i]}; 
done
```

Sauf qu’à-priori ma deuxième boucle n’est pas bonne puisque je n’ai que le premier élément affiché …  
Je suis sûr qu’il me faille compter d’abord le nb d’élèments pour ensuite l’inclure dans la boucle afin d’arriver au résultat, n’est-ce pas ?!

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/2 "2016-02-20T15:56:31Z")

</div>

Pour ce qui est de connaître le nb d’éléments, je sais faire :

```auto
nb=${#IFACE[*]}
```

après, j’ai un blanc …

PS : faut peut être que j’aille manger … 😛

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/3 "2016-02-20T15:56:31Z")

</div>

pas besoin de compter le nombre d’éléments: il y a I éléments à la fin de la première boucle.  
Mais de toutes les manières, même ta première boucle ne passe pas: ou as tu vu jouer ce let et ce ++ ? La variable $I n’est même pas numerique, puisque le numerique n’existe pas en shell.  
Il te faut trouver une autre logique que l’utilisation d’indices.  
Tu fais trop de c/c++, ça te déforme 😆

Et tu devrais tester tes scripts, avant de demander aux autres de les débuguer, tu aurais l’air plus sérieux 😆

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/4 "2016-02-20T15:56:31Z")

</div>

[quote=“mattotop”]pas besoin de compter le nombre d’éléments: il y a I éléments à la fin de la première boucle.  
Mais de toutes les manières, même ta première boucle ne passe pas: ou as tu vu jouer ce let et ce ++ ? La variable $I n’est même pas numerique, puisque le numerique n’existe pas en shell.  
Il te faut trouver une autre logique que l’utilisation d’indices.  
Tu fais trop de c/c++, ça te déforme 😆  
Et tu devrais tester tes scripts, avant de demander aux autres de les débuguer, tu aurais l’air plus sérieux 😆[/quote]

Que de conclusions terriblements hâtives … j’apprécie énormèment. 👿

-1- Je ne suis aucunèment développeur, web peut-être, mais encore moins programmeur …  
-2- contrairement à ce que tu avances, du fait que la première boucle ne fonctionnerait pas, que le let est une abérration … le script est fonctionnel à-priori, puisque qd je le lances soit par ‘sh [script.sh](http://script.sh)’ ou par ‘./script.sh’ (dans ce cas avec un chmod 0755), il exécute bien ce qui lui est demandé, à savoir dans la première boucle de créer une variable tableau, de l’incrémenter, lui attribuer une valeur et enfin afficher l’ensemble !  
-3- je ne cherches aucunèment à paraître, que ce soit sérieux ou non. Ensuite, je n’ai nullement demander de me déboguer cela, mais de m’aider à comprendre comment faire - demande implicite, non explicite -.

J’ai une idée en tête, je fais donc des tests en bash - environnement que je ne maîtrise pas du tout, et je ne serais pas mort de pas le maîtriser ! -

Tu serais gentil d’éviter à l’avenir les conclusions hâtives, et d’envoyer paître les gens dans leur baraquement, sous je ne sais quel prétexte. Un peu plus de convivialité te rendrait plus amical.

PS : Si, par hasard, je me trompe sur tes sentiments à mon égard, je te prie de m’excuser…

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/5 "2016-02-20T15:56:32Z")

</div>

excuse accepté 😃

Ensuite pour du bash voila quelques aides

[marcg.developpez.com/ksh/](http://marcg.developpez.com/ksh/)  
[linux.developpez.com/guide/x3665.html](http://linux.developpez.com/guide/x3665.html)

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/6 "2016-02-20T15:56:32Z")

</div>

> [@](#):
>
> excuse accepté 😃

dsl, j’apprécie pas l’humour, là !

[quote]  
Ensuite pour du bash voila quelques aides

[marcg.developpez.com/ksh/](http://marcg.developpez.com/ksh/)  
[linux.developpez.com/guide/x3665.html](http://linux.developpez.com/guide/x3665.html)[/quote]

merci…  
et, justement le ‘let I++’, je l’ai vu et lu sur certains tutos bash, j’ai testé, et ça marche.

---

<div class="post-metadata">

**Author:** ![Hoshin](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hoshin/32/3672_2.png) [@Hoshin](https://www.debian-fr.org/u/Hoshin)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/7 "2016-02-20T15:56:32Z")

</div>

Du calme … matt ne te cherche pas, ne t’ennerve donc pas. “Kipe coule” tout ca… Et quand bien même il te chercherait t’ennerver serait aller dans son sens. Allez hop concentre toi sur ton tuto bash plutot 😛

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/8 "2016-02-20T15:56:33Z")

</div>

quote="PengouinPdt"  
Que de conclusions terriblements hâtives … j’apprécie énormèment. 👿  
(…)[/quote]Comme dit hoshin: :smt003  
Désolé de ma rugosité.  
Bon, je vais lire le reste du fil, pour voir si j’ai mieux à dire comme \>conclusions\< 😉

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/9 "2016-02-20T15:56:33Z")

</div>

quote="PengouinPdt"  
PS : Si, par hasard, je me trompe sur tes sentiments à mon égard, je te prie de m’excuser…[/quote]Bon déjà, considères ça comme acquis, et encore désolé pour ma part…

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/10 "2016-02-20T15:56:33Z")

</div>

[code]#!/bin/sh  
fichier=/etc/network/interfaces  
I=0  
i=0  
for x in $(grep iface $fichier | awk ‘{print $2}’)  
do  
if [“$x” != “lo”]; then  
IFACE[$I]=$x;  
echo IFACE[${I}]’ = '${IFACE[$I]};  
let I++;  
fi  
done

while [“$i” -lt “$I”]  
do  
echo ${IFACE[$i]};  
let "i = $i + 1"  
done [/code]C’est peut etre pas un codage propre mais je pense que ca doit faire ce que tu cherche.

[tldp.org/LDP/abs/abs-guide.pdf](http://www.tldp.org/LDP/abs/abs-guide.pdf)

ps: Ici c’est une bonne ambiance faut pas prendre mal tous ce qui est dit

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/11 "2016-02-20T15:56:34Z")

</div>

quote=“PengouinPdt”  
-2- contrairement à ce que tu avances, du fait que la première boucle ne fonctionnerait pas, que le let est une abérration … le script est fonctionnel à-priori, puisque qd je le lances soit par ‘sh [script.sh](http://script.sh)’ ou par ‘./script.sh’ (dans ce cas avec un chmod 0755), il exécute bien ce qui lui est demandé, à savoir dans la première boucle de créer une variable tableau, de l’incrémenter, lui attribuer une valeur et enfin afficher l’ensemble !  
(…)[/quote]Ben écoutes, c’est le premier truc que j’ai fait aussi, CE MATIN:

[code]console@MAT64LIN:~$ cat \>\>[intftest.sh](http://intftest.sh)  
#!/bin/sh  
fichier=/etc/network/interfaces  
I=0

for x in $(grep iface $fichier | awk ‘{print $2}’)  
do  
if [“$x” != “lo”]; then  
IFACE[$I]=$x;  
echo IFACE[${I}]’ = '${IFACE[$I]};  
let I++;  
fi  
done

for i in $IFACE  
do  
echo ${IFACE[$i]};  
done  
console@MAT64LIN:~$ chmod +x [intftest.sh](http://intftest.sh)  
console@MAT64LIN:~$ ./intftest.sh  
./intftest.sh: 9: Syntax error: Bad substitution  
[/code] Alors ça c’est ce qui s’est passé sur ma machine de ce matin quand j’ai commencé à te répondre, et c’est ce qui a motivé ma réponse critique quand au fait d’essayer les scripts avant de les “débuguer”.  
MAIS  
quand je reviens chez moi sur mon portable, j’obtiens

[code]roc@roc:~$ cat \>\>[intftest.sh](http://intftest.sh)  
#!/bin/sh  
fichier=/etc/network/interfaces  
I=0

for x in $(grep iface $fichier | awk ‘{print $2}’)  
do  
if [“$x” != “lo”]; then  
IFACE[$I]=$x;  
echo IFACE[${I}]’ = '${IFACE[$I]};  
let I++;  
fi  
done

for i in $IFACE  
do  
echo ${IFACE[$i]};  
done  
roc@roc:~$ chmod +x [intftest.sh](http://intftest.sh)  
roc@roc:~$ ./intftest.sh  
IFACE[0] = eth0  
IFACE[1] = eth1  
eth0[/code]Je comprends donc mieux que tu n’ai pas aimé que j’ai pu douter du fait que tu avais testé ton script. Voilà voilà. 😒

Alors comme je ne suis pas non plus développeur, que je ne connais pas tout du sh, que je ne connaissais pas le let, et qu’en débuguant mon shell de ce matin râlait sur le let, je me suis permis de me moquer un peu.

Bon, pour revenir à ton pb, puisque le let fonctionne, voici la solution:

[code]roc@roc:~$ cat [intftest.sh](http://intftest.sh)  
#!/bin/sh  
fichier=/etc/network/interfaces  
I=0

for x in $(grep iface $fichier | awk ‘{print $2}’)  
do  
if [“$x” != “lo”]; then  
IFACE[$I]=$x;  
echo IFACE[${I}]’ = '${IFACE[$I]};  
let I++;  
fi  
done

#for i in $IFACE  
#do  
while [$I -gt 0]  
do  
let I–;  
echo ${IFACE[$I]};  
done  
roc@roc:~$ ./intftest.sh  
IFACE[0] = eth0  
IFACE[1] = eth1  
eth1  
eth0  
[/code]

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/12 "2016-02-20T15:56:34Z")

</div>

bon, j’ai trouvé d’ou venait la difference:

`console@MAT64LIN:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun 29 2006 /bin/sh -> dash`et`roc@roc:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2007-02-10 20:04 /bin/sh -> bash`dash etant plus posix que bash, j’en déduis que le let est spécifique au bash, et n’est pas portable en shell standard.

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/13 "2016-02-20T15:56:36Z")

</div>

Bon, merci à toi, mattotop, - et les autres, aussi -…

J’y suis arrivé, légèrement différement :

[code]#!/bin/bash

IFC=/sbin/ifconfig  
RTE=/sbin/route

fichier=/etc/network/interfaces  
I=0

ExecScript() {  
nb=${#ETH[\*]}-1;  
#echo $nb’ valeurs dans le tableau ETH’;

```
for ((i=0;$i<=$nb;i++))
do
	if ["${IP[$i]}" != "" ]; then 
		echo ETH[${i}]' : '${ETH[$i]}' '${IP[$i]}'/'${MASK[$i]}' bdc:'${BDC[$i]}' net:'${NET[$i]}' Red:'${LAN[$i]};
		... instructions n ...
	fi
done

```

}

SearchIFace() {  
for x in $(grep iface $fichier | awk ‘{print $2}’)  
do  
if [“$x” != “lo”]; then  
ETH[$I]=$x;  
#echo ETH[${I}]’ = '${ETH[$I]};  
IP[$I]=`$IFC ${ETH[$I]} | grep Bcast | awk '{print $2}' | cut -d : -f 2`;  
BDC[$I]=`$IFC ${ETH[$I]} | grep Bcast | awk '{print $3}' | cut -d : -f 2`;  
MASK[$I]=`$IFC ${ETH[$I]} | grep Bcast | awk '{print $4}' | cut -d : -f 2`;  
NET[$I]=`$RTE -n | grep ${MASK[$I]} | awk '{print $1}'`;  
LAN[$I]="${NET[$I]}/24";  
let I++;  
fi  
done  
}

SearchIFace  
ExecScript

… n new instructions …  
[/code]

Bon, en fait, maintenant je m’expliques …  
le trip auquel j’ai pensé ce week-end, et qui m’a pris une bonne partie de la journée …

était de me demander comment récupèrer les interfaces, à partir du fichier interfaces, l’éventrer un peu, et récupèrer les infos correspondantes, afin de fignoler un script iptables pour protéger mon laptop un temps soit peu, et ce quelque soit l’interface réseau déclarée, active de surcroît.

On peut certainement faire plus simple, mais j’aboutit au trip que je voulais 😈

PS : y’a aucune rancune ou ressenti de ma part, j’ai juste exprimé que les propos de mattotop me paraissaient un peu dur … à avaler, aussi.  
De fait, comme en plus, il le reconnait, comment ne pas pardonner 😛😉

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/14 "2016-02-20T15:56:46Z")

</div>

résolu?

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 20, 2016, 3:56 UTC](https://www.debian-fr.org/t/resolu-bash-lecture-de-fichier-dans-variable/7926/15 "2016-02-20T15:56:47Z")

</div>

> [@](#):
>
> résolu?

beh, comme tu peux le lire : oui 😈
