obtenir les fichiers d'un répertoire en shell - Shell/Batch - Programmation
Marsh Posté le 15-12-2006 à 16:45:16
files[$cpt]="$i" ne change rien
la fonction read s'utilise à la place de mon find?
Marsh Posté le 17-12-2006 à 15:45:30
la fonction read permet de récupéré des informations tapées au clavier
je vois pas trop comment l'utiliser dans mon cas
merci de votre aide
Marsh Posté le 17-12-2006 à 17:44:35
Code :
|
Marsh Posté le 17-12-2006 à 23:24:06
cette solution à l'aire de marcher, je vais la tester un peu plus
merci en tout cas!
Marsh Posté le 18-12-2006 à 19:18:49
bonsoir,
alors voila le script "amélioré"
Code :
|
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é...
merci de votre aide (je suis débutant en shell, donc c'est peut etre sur la forme que je butte...)
Marsh Posté le 18-12-2006 à 23:55:30
Citation : 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é... |
pour que le shell effectue un calcul numerique je crois qu'il faut un 'let' devant
Code :
|
Marsh Posté le 19-12-2006 à 07:56:32
j'ai une question bête : pourquoi tu t'embêtes à mettre dans une variable tableau ? c'est vrai le shell c'est plutôt pour faire des trucs rapides, avec des commandes encapsulées
Marsh Posté le 19-12-2006 à 18:54:49
dams78 a écrit : la fonction read permet de récupéré des informations tapées au clavier |
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 |
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,
|
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 :
|
dams78 a écrit : merci de votre aide (je suis débutant en shell) |
Tuto de shell en français ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf
dams78 a écrit :
|
Petit détail:
machin=`echo truc` |
Se remplace avantageusement par
machin=truc |
Marsh Posté le 14-12-2006 à 17:52:30
bonjour,
je possède ce code :
qui est sensé récupéré tous les fichier d'un répertoire dans un tableau et par la même occasion les affichiers (les fichiers)
seulement j'ai remarqué que si le fichier contient des espaces, ceux ci sont considéré comme de retours chariot...
comment je peux faire pour éviter cela?
merci
---------------
dam's (debianer), ma galerie Flickr