====== Lire un fichier texte ligne par ligne ====== * Objet : script bash read file * Niveau requis :{{tag>débutant avisé}} * Commentaires : //Lire un fichier ligne par ligne avec le script read file// * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) * Suivi : {{tag>à-tester}} * Création par [[user>mattux]] le 09/07/2007 * Testé par .... le .... * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=116004#p116004 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) ===== Script ===== Script Shell (bash, zsh, ksh, dash,...), pour lire un fichier texte, ligne par ligne : #variable du fichier fichier="test.txt" #initialisation du compteur i=0 while IFS= read -r ligne; do #traitement des lignes 1 et 2 if [ "$i" -eq 1 ]; then echo "Nom: $ligne" elif [ "$i" -eq 2 ]; then echo "Prénom: $ligne" fi # incrementation du compteur i=$(($i+1)) done < "$fichier" exit 0 Le fichier ''test.txt'' doit exister dans le même répertoire que le script ===== Explication ===== Cette méthode est simple, efficace et __correcte__. ==== Commande ==== IFS= read -r === Options === IFS (Internal Field Separator) C'est une variable spéciale de votre shell. \\ Avec elle, quand votre ligne contient des caractères //blancs//((espaces, tabulations)), **read** les supprime au début et à la fin, avant de placer le résultat dans **ligne**. Entrez la ligne de commande suivante pour visualiser le contenu de la variable ''IFS'' utilisée par votre interpréteur de commande. set | grep IFS === read -r === read avec option -r, sinon les backslashes (**\**) seront interprétés, or nous voulons conserver le contenu du fichier intact. ===== Exemple ===== Le contenu du fichier ''test.txt'' utilisé dans cet l'exemple est : Dark TUX Lors de l'exécution du script, on aura à l'écran : Nom : Dark Prénom: TUX Bien entendu, vous pouvez modifier le script selon vos besoins.