[Bash] Boucle while - export variable

Résolu/Fermé
Signaler
Messages postés
4
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
14 février 2007
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 562
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


Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 890
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;
;-))