dams78 a écrit :
la fonction read permet de récupéré des informations tapées au clavier je vois pas trop comment l'utiliser dans mon cas
|
En fait, le programme "read" (et non la fonction) récupère toute info dans l'entrée standard. Mais rien ne t'empêche de rediriger cette entrée à partir d'autre chose
Ex:
read a </etc/passwd
echo $a # => tu obtiens tout le contenu de "/etc/passwd" |
Donc dans la syntaxe "flux quelconque |while read LINE do; ... done", le shell commence par mettre le flux entier dans le pipe, puis le while entre en jeu et lance le read qui lit l'entrée standard (le pipe). Il s'arrête au premier "return" (première ligne) et charge cette ligne dans la variable "LINE" que tu traiteras dans la boucle pendant que le pipe est vidé de ce qui a été lu. Puis ça recommence et tu lis la seconde ligne etc jusqu'à la fin. A la fin, le pipe étant vide, le "read" renvoie "faux" et le "while" s'arrête.
Ce principe est courament utilisé pour traiter n'importe quel flux entrant ligne par ligne...
dams78 a écrit :
bonsoir,
alors voila le script "amélioré"
Code :
- find $rep -type f | while read LINE
- do
- wall[$cpt]=`echo $LINE`
- cpt=$(($cpt+1))
- done
- echo $cpt
|
seulement l'affichage de mon cpt renvoi 0 , alors que si je fais un echo cpt=$(($cpt+1)) à chaque appel du while je vois bien le cpt s'incrémenté...
donc c'est peut etre sur la forme que je butte...)
|
Tu ne buttes absolument pas sur la forme. Ton shell est parfaitement écrit. Le pb, c'est que ton pipe (| while read ...) te génère un sous processus qui disparait en fin de done. Ton sous-processus disparait ainsi que toutes ses variables modifiées.
Pour t'en sortir, il faut grouper le while et le echo avec des parenthèses (qui servent à grouper différentes commandes dans un même processus)
Code :
- find $rep -type f | ( while read LINE
- do
- wall[$cpt]=`echo $LINE`
- cpt=$(($cpt+1))
- done
- # Ici, on est toujours dans le même processus grâce aux parenthèses
- echo $cpt)
- # Ici, on a quitté le sous-processus - cpt vaut la valeur du départ
- echo $cpt
|
Tuto de shell en français ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf
Petit détail:
Se remplace avantageusement par
Message édité par Sve@r le 19-12-2006 à 19:59:44
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.