[Bash] Boucle while - export variable

Résolu
paul@gloomoot Messages postés 4 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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