impossible de faire un compteur tout simple ! [KSH] - Codes et scripts - Linux et OS Alternatifs
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
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.
Marsh Posté le 23-09-2005 à 08:40:58
Merci pour l'information
Marsh Posté le 21-09-2005 à 09:59:05
Bonjour
j'y comprends plus rien
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
---------------
PSN : julien_fr38