[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
    
    4
    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


      3
      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;
        ;-))
        3