====== 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.