Cet article explique comment lire des fichiers dans des scripts bash à l’aide d’un boucle while. La lecture d’un fichier est une opération courante en programmation. Vous devez être familiarisé avec les différentes méthodes et la méthode la plus efficace à utiliser. Dans bash, une seule tâche peut être accomplie de plusieurs façons, mais il y a toujours un moyen optimal d’accomplir la tâche et nous devons la suivre.
Avant de voir comment lire le contenu d’un fichier à l’aide de boucle while, une introduction rapide sur le fonctionnement de la boucle while. La boucle While évalue une condition et itère sur un ensemble donné de codes lorsque la condition est vraie.
while [ CONDITION ] do code block done
Décomposons boucle while syntaxe.
- boucle while doit commencer par un mot-clé while suivi d’une condition.
- UNE état devrait être enfermé dans [ ] ou [[ ]]. La condition doit toujours retourner true pour que la boucle soit exécutée.
- Le bloc de code réel sera placé entre fais et Fini.
NUMBER=0 while [[ $NUMBER -le 10 ]] do echo " Welcome ${NUMBER} times " (( NUMBER++ )) done
Ceci est un exemple très simple, où le boucle s’exécute jusqu’à NUMÉRO n’est pas supérieur à dix et imprime le déclaration d’écho.
Avec tandis que nous utiliserons le lire commande pour lire le contenu d’un fichier ligne par ligne. Voici la syntaxe de la façon dont tandis que et lire les commandes sont combinées. Il existe maintenant différentes manières de transmettre le fichier en entrée et nous les verrons toutes.
# SYNTAX while read VARIABLE do code done
Tuyauterie sous Linux
Normalement, nous utiliserons le commande de chat pour afficher le contenu du fichier depuis le terminal. De plus, nous dirigerons la sortie du commande de chat à d’autres commandes comme grep, Trier, etc.
De même, nous utiliserons le commande de chat ici pour lire le contenu du fichier et le diriger vers un tandis que boucle. Pour démonstration, j’utilise / etc / passwd mais il n’est pas conseillé de jouer avec ce fichier, alors prenez une copie de sauvegarde de ce fichier et jouez avec si vous le souhaitez.
cat /etc/passwd | while read LREAD do echo ${LREAD} done
Décrivons ce qui se passera lorsque le code ci-dessus sera soumis.
- cat / etc / passwd lira le contenu du fichier et le passera en entrée via le tube.
- lire La commande lit chaque ligne passée en entrée de la commande cat et la stocke dans le LIRE variable.
- lire la commande lira le contenu du fichier jusqu’à ce que EOL est interprété.
Vous pouvez également utiliser d’autres commandes comme tête, queue et tuyau il en boucle while.
head -n 5 /etc/passwd | while read LREAD do echo ${LREAD} done
Redirection d’entrée sous Linux
Nous pouvons rediriger le contenu du fichier vers boucle while utilisation de l’opérateur de redirection d’entrée (<)
.
while read LREAD do echo ${LREAD} done < /etc/passwd | head -n 5
Vous pouvez également stocker le nom du fichier dans une variable et le transmettre via un opérateur de redirection.
FILENAME="/etc/passwd" while read LREAD do echo ${LREAD} done < ${FILENAME}
Vous pouvez également transmettre des noms de fichiers comme argument à votre script.
while read LREAD do echo ${LREAD} done < $1 | head -n 5
Séparateur de champ interne
Vous pouvez travailler avec différents types de formats de fichiers (CSV, SMS, JSON) et vous souhaiterez peut-être diviser le contenu du fichier en fonction d’un délimiteur personnalisé. Dans ce cas, vous pouvez utiliser « Séparateur de champ interne (IFS)”Pour diviser le contenu du fichier et le stocker dans des variables.
Laissez-moi vous montrer comment cela fonctionne. Jetez un œil à / etc / passwd fichier qui a un deux-points (:)
comme délimiteur. Vous pouvez maintenant séparer chaque mot d’une ligne et le stocker dans une variable distincte.
Dans l’exemple ci-dessous, je divise / etc / passwd fichier avec un deux-points comme séparateur et en stockant chaque division en différentes variables.
while IFS=":" read A B C D E F G do echo ${A} echo ${B} echo ${C} echo ${D} echo ${E} echo ${F} echo ${G} done < /etc/passwd
J’ai affiché une seule ligne divisée dans la capture d’écran ci-dessus en tenant compte de la taille de la capture d’écran.
Lignes vides sous Linux
Les lignes vides ne sont pas ignorées lorsque vous boucle à travers le contenu du fichier. Pour démontrer cela, j’ai créé un exemple de fichier avec le contenu ci-dessous. Il y a 4 lignes et quelques lignes vides, des espaces blancs de début, des espaces blancs de fin, des caractères de tabulation à la ligne 2 et des caractères d’échappement ( n et t).
while read LREAD do echo ${LREAD} done < testfile
Voir le résultat, la ligne vide n’est pas ignorée. De plus, il est intéressant de noter comment les espaces blancs sont coupés par le lire commander. Un moyen simple d’ignorer les lignes vides lors de la lecture du contenu du fichier consiste à utiliser l’opérateur de test avec le -z
indicateur qui vérifie si la longueur de la chaîne est égale à zéro. Répétons maintenant le même exemple mais cette fois avec un opérateur de test.
while read LREAD do if [[ ! -z $LREAD ]] then echo ${LREAD} fi done < testfile
Maintenant, à partir de la sortie, vous pouvez voir que les lignes vides sont ignorées.
Personnages de fuite
Échapper à des personnages comme n
, t
, c
ne sera pas imprimé lors de la lecture d’un fichier. Pour démontrer cela, j’utilise le même fichier d’exemple qui contient peu de caractères d’échappement.
while read LREAD do echo ${LREAD} done < testfile
Vous pouvez voir à partir de la sortie les caractères d’échappement ont perdu leur signification et seulement n et t sont imprimés au lieu de n
et t
. Vous pouvez utiliser -r
pour empêcher l’interprétation de la barre oblique inverse.
while read -r LREAD do echo ${LREAD} done < testfile
Voilà pour cet article. Nous aimerions avoir de vos nouvelles si vous avez des commentaires ou des conseils. Vos commentaires nous aident à créer un meilleur contenu. Continuez à lire et continuez à soutenir.
Si vous appréciez ce que nous faisons ici sur TecMint, vous devriez considérer:
TecMint est le site communautaire à la croissance la plus rapide et le plus fiable pour tout type d’articles, de guides et de livres Linux sur le Web. Des millions de personnes visitent TecMint! pour rechercher ou parcourir les milliers d’articles publiés disponibles GRATUITEMENT à tous.
Si vous aimez ce que vous lisez, pensez à nous acheter un café (ou 2) en guise de remerciement.
Nous sommes reconnaissants pour votre soutien sans fin.
.