Script Unix

Bonjour,

Je rencontre un souci dans le script unix que j'ai écrit.
Dans une boucle de lecture d'un fichier, j'incrémente une variable selon certaines conditions durant le traitement de la boucle. Je fais afficher également le conenu de la variable pour la mise au point. La variable affichée contient la valeur attendue.
Lorsque la boucle se termine, je fais également afficher la variable, et là, surprise, la variable est à zéro.

Je ne comprends pas.

Ci-dessous, un exemple du script.

export CRET=0

cat $VINF | while read T_Rec T_Fld1 T_Fld2
do

echo "$T_Rec|$T_Fld1"

if [ $T_Rec = "A" ]
then
# traitement a realiser.
# ....

((CRET+=1))
echo "CRET : $CRET">>$LOG

elif [ $T_Rec = "B" ]
then
# traitement a realiser.
# ....

((CRET+=1))
echo "CRET : $CRET">>$LOG

elif [ $T_Rec = "C" ]
then
# traitement a realiser.
# ....

((CRET+=1))
echo "CRET : $CRET">>$LOG

fi

echo "ETAT1 CRET : $CRET">>$LOG

done

echo "ETAT2 CRET : $CRET">>$LOG
Configuration: Windows XP
Internet Explorer 6.0

2 réponses

  1. Modérateur
    Salut,

    Essaie comme ça :
    export CRET=0
    
    cat $VINF | 
    (
    while read T_Rec T_Fld1 T_Fld2
    do
    ...
    
    ...
    fi
    
    echo "ETAT1 CRET : $CRET">>$LOG
    
    done
    
    echo "ETAT2 CRET : $CRET">>$LOG
    )


    Ou encore comme ça :
    while read T_Rec T_Fld1 T_Fld2
    do
    ...
    
    ...
    fi
    
    echo "ETAT1 CRET : $CRET">>$LOG
    
    done < $(eval echo $VINF)
    
    echo "ETAT2 CRET : $CRET">>$LOG
    ;-))
    1. Contributeur
      Parce que la boucle
      cat $VINF | while read T_Rec T_Fld1 T_Fld2
      done
      crée un sous shell et que les variables de ce sous shell ne sont jamais passées au shell appellant.
      1. Modérateur
        Merci de préciser, j'avais z'oublié ;-))