[Bash] Boucle while - export variable

Résolu/Fermé
paul@gloomoot Messages postés 4 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 14 février 2007 - 14 févr. 2007 à 11:54
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 15 févr. 2007 à 07:45
Bonjour,

J'ai une question... quand j'exécute le script suivant :

#!/bin/bash

I=-1;
cat file.txt | while read REF_LINE
do
{
   let I++;
}
done
echo "I = "$I;


J=-1;
while [ $J -lt 100 ]
do
{
   let J++;
}
done
echo "J = "$J;


j'obtiens l'affichage :

I = -1
J = 100


Pourquoi la variable I n'est elle pas exportée hors de la boucle?
Et surtout, comment faire pour récupérer sa valeur?

Merci d'avance de votre aide :)

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 févr. 2007 à 18:26
Salut,

tu peux faire comme ça
lami20j@debian:~$ cat paul.sh
#!/bin/bash

I=0;
while read REF_LINE ;do
  let I++
done < file.txt
echo "I = "$I;


J=-1;
while [ $J -lt 100 ];do
  let J++;
done
echo "J = "$J;
lami20j@debian:~$ cat file.txt
ligne1
ligne2
ligne3
lami20j@debian:~$ sh paul.sh
I = 3
J = 100
4
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
14 févr. 2007 à 18:51
Sinon voilà pour ton script
#!/bin/bash

I=-1;
cat file.txt | (while read REF_LINE
do
{
   let I++;
}
done
echo "I = "$I;)


J=-1;
while [ $J -lt 100 ]
do
{
   let J++;
}
done
echo "J = "$J;


J'ai mis cette partie entre paranthèses
while read REF_LINE
do
{
   let I++;
}
done
echo "I = "$I;


Voir man bash - Commandes composées (liste)

Voilà comme j'écrirais ton script
#!/bin/bash

I=0;
cat file.txt | (while read REF_LINE;do
   let I++
done
echo I = $I)

J=-1;
while [ $J -lt 100 ];do
   let J++
done
echo J = $J


3
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
15 févr. 2007 à 07:45
Salut,

Tu peux aussi employer la commande "exec" :
#!/bin/bash

I=0;
exec < file.txt
while read REF_LINE ;do
  let I++
done
echo "I = "$I;


J=-1;
while [ $J -lt 100 ];do
  let J++;
done
echo "J = "$J;
;-))
3