[Bash] Boucle while - export variable

Résolu
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 :)
Configuration: Windows XP
Firefox 2.0.0.1

3 réponses

  1. Modérateur
    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
    
    1. Modérateur
      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;
      ;-))
      1. Modérateur
        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