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
Alors Que La Boucle
Alors Que La Boucle

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.

Publicité
# 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
Tuyauterie Sous Linux
Tuyauterie Sous Linux

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
Commandement De La Tête
Commandement De La Tête

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
Redirection D'Entrée
Redirection D&Rsquo;Entrée

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}
Stocker Le Nom De Fichier Dans Une Variable
Stocker Le Nom De Fichier Dans Une Variable

Vous pouvez également transmettre des noms de fichiers comme argument à votre script.

while read LREAD
do
    echo ${LREAD}
done < $1 | head -n 5
Stocker Le Nom De Fichier Comme Argument
Stocker Le Nom De Fichier Comme Argument

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
Séparateur De Champ Interne
Séparateur De Champ Interne

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

Fichier Avec Des Lignes Vides
Fichier Avec Des Lignes Vides
while read LREAD
do
    echo ${LREAD}
done < testfile
Ligne Vide Non Ignorée
Ligne Vide Non Ignorée

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
Lignes Vierges Ignorées
Lignes Vierges Ignorées

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.

Fichier Avec Des Caractères D'Échappement
Fichier Avec Caractères D&Rsquo;Échappement
while read LREAD
do
    echo ${LREAD}
done < testfile
Caractère D'Échappement Sous Linux
Caractère D&Rsquo;Échappement Sous Linux

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
Empêcher L'Interprétation De La Barre Oblique Inverse
Empêcher L&Rsquo;Interprétation De La Barre Oblique Inverse

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.

Soutenez-Nous

Nous sommes reconnaissants pour votre soutien sans fin.

.

Rate this post
Publicité
Article précédentSoumission pour l’installation d’un mât 5G à Darwen dans le cadre du déploiement de la technologie «  vitale  »
Article suivantDragon Ball Z Cosplay voyage dans le passé avec Videl
Avatar De Violette Laurent
Violette Laurent est une blogueuse tech nantaise diplômée en communication de masse et douée pour l'écriture. Elle est la rédactrice en chef de fr.techtribune.net. Les sujets de prédilection de Violette sont la technologie et la cryptographie. Elle est également une grande fan d'Anime et de Manga.

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici