[KSH] impossible de faire un compteur tout simple !

impossible de faire un compteur tout simple ! [KSH] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 21-09-2005 à 09:59:05    

Bonjour
 
j'y comprends plus rien  :pt1cable:
je veux faire un compteur de base
mais ca marche pas
 
#!/bin/ksh
 
NomScript=$(basename $0)
DirScript=$(dirname $0)
 
valeur=0
 
FicData=${DirScript}/analyze_table_and_index.dat
 
cat ${FicData} | while read Data
do
        let valeur=$valeur+1
        echo $valeur
done
 
echo $valeur
 
 
 
echo $valeur renvoie bien la valeur qui s'incremente au fur et à mesure de la lecture du fichier
 
echo $valeur renvoie 0, c'est à dire la valeur de départ
 
comprends pas  :sweat:  
 


---------------
PSN : julien_fr38
Reply

Marsh Posté le 21-09-2005 à 09:59:05   

Reply

Marsh Posté le 21-09-2005 à 10:03:41    

ce script la fonctionne  
 
while read -r LIGNE
do
        let valeur=$valeur+1
done < ${FicData}
 
echo $valeur
 
 
mais j'aimerais quand même savoir pourquoi ca marche pas pour le 1er script :(


---------------
PSN : julien_fr38
Reply

Marsh Posté le 22-09-2005 à 18:37:08    

C'est piege ultra-classique et deja explique 10,000 fois. Si tu fais un pipe, la partie droite est executee dans sous-shell (forcement, puisque les parties droites et gauches doivent s'executer en meme temps). Qu'est-ce que la partie droite de ton pipe ? Tout ce qui est entre le "while" et le "done", compris. Donc tu incremente <valeur> dans un sous-shell, ce qui ne modifie evidemment pas <valeur> dans le shell pere. Et ton "echo" est dans le shell pere.
 
Une solution est d'ouvrir un parenthese apres le "|" et de la fermer apres ton dernier "echo". Ca a pour effet de lancer tout le contenu des parentheses dans un sous-shell, plutot que seulement l'expression qui suit le pipe.

Reply

Marsh Posté le 23-09-2005 à 08:40:58    

Merci pour l'information :)


---------------
PSN : julien_fr38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed