Différentes façons de lire le fichier dans le script bash en utilisant While Loop

Différentes façons de lire le fichier dans le script bash en utilisant While Loop

Cet article consiste à lire des fichiers dans des scripts bash à l'aide d'un pendant la boucle. La lecture d'un fichier est une opération courante dans la programmation. Vous devez être familier avec différentes méthodes et quelle méthode est la plus efficace à utiliser. Dans Bash, une seule tâche peut être réalisée de nombreuses façons, mais il existe toujours un moyen optimal de faire la tâche et nous devons le suivre.

Avant de voir comment lire le contenu des fichiers en utilisant pendant la boucle, une amorce rapide sur le fonctionnement de la boucle. Tandis que Loop évalue une condition et itère sur un ensemble donné de codes lorsque la condition est vraie.

tandis que [condition] faire le bloc de code fait 

Faisons tomber pendant la boucle syntaxe.

  • pendant la boucle devrait commencer avec un mot clé suivi d'une condition.
  • UN condition devrait être enfermé à l'intérieur [] ou [[]]. La condition doit toujours revenir vrai pour que la boucle soit exécutée.
  • Le bloc de code réel sera placé entre faire et fait.
Numéro = 0 tandis que [[$ numéro -le 10]] fait écho "bienvenue $ nombre fois" ((nombre ++)) fait 
Pendant la boucle

C'est un exemple très simple, où le boucle exécute jusqu'à NOMBRE n'est pas plus grand que dix et imprime la déclaration d'écho.

Avec alors que Nous utiliserons le lire Commande pour lire le contenu d'un fichier ligne par ligne. Ci-dessous est la syntaxe de la façon dont alors que et lire Les commandes sont combinées. Maintenant, il existe différentes façons de passer le fichier en entrée et nous les verrons tous.

# Syntaxe pendant la lecture de la variable DO Code fait 

Piping en Linux

Normalement, nous utiliserons la commande CAT pour afficher le contenu du fichier à partir du terminal. De plus, nous allons tuer la sortie du commandement de chat à d'autres commandes comme grep, tri, etc.

De même, nous utiliserons le commandement de chat ici pour lire le contenu du fichier et le tuer sur un alors que boucle. Pour une démonstration, j'utilise / etc / passwd fichier mais il n'est pas conseillé de gâcher ce fichier, alors prenez une copie de sauvegarde de ce fichier et jouez avec elle si vous le souhaitez.

chat / etc / passwd | Pendant que lisez lread do echo $ lread fait 
Piping en Linux

Décomposons ce qui se passera lorsque le code ci-dessus sera soumis.

  • chat / etc / passwd Lirera le contenu du fichier et le passe comme entrée via le tuyau.
  • lire La commande lit chaque ligne passée comme entrée de la commande cat et la stocke dans le Se percer variable.
  • lire La commande lira le contenu des fichiers jusqu'à Eol est interprété.

Vous pouvez également utiliser d'autres commandes comme la tête, la queue et la tuyau à la boucle.

tête -N 5 / etc / passwd | Pendant que lisez lread do echo $ lread fait 
Commande de tête

Redirection d'entrée dans Linux

Nous pouvons rediriger le contenu du fichier vers pendant la boucle Utilisation de l'opérateur de redirection d'entrée (<).

Pendant que lisez lread do echo $ lread fait < /etc/passwd | head -n 5 
Redirection d'entrée

Vous pouvez également stocker le nom de fichier à une variable et le passer via un opérateur de redirection.

Filename = "/ etc / passwd" tout en lisant lread do echo $ lread fait < $FILENAME 
Stocker le nom de fichier en variable

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

Pendant que lisez lread do echo $ lread fait < $1 | head -n 5 
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 pouvez 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 en variables.

Laissez-moi démontrer comment cela fonctionne. Jetez un œil au / etc / passwd dossier qui a un côlon (:) En tant que délimiteur. Vous pouvez désormais diviser chaque mot à partir d'une ligne et le stocker dans une variable distincte.

Dans l'exemple ci-dessous, je divise / etc / passwd déposer avec un côlon comme séparateur et stocker chaque division en différentes variables.

tandis que ifs = ":" Lire un b c d e f g do echo $ a echo $ b echo $ c echo $ d echo $ e echo $ f echo $ g fait fait < /etc/passwd 
Séparateur de champ interne

J'ai affiché une seule ligne divisée dans la capture d'écran ci-dessus en considérant la taille de la capture d'écran.

Lignes vides dans Linux

Les lignes vides ne sont pas ignorées lorsque vous boucle via 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 peu de lignes vides, des espaces blancs, des espaces blancs traînants, des caractères d'onglet à la ligne 2, et quelques caractères d'évasion (\ n et \ t).

Fichier avec des lignes vides
Pendant que lisez lread do echo $ lread fait < testfile 
Ligne vide non ignorée

Voir le résultat, la ligne vide n'est pas ignorée. De plus, une chose intéressante à noter est la façon dont les espaces blancs sont coupés par le lire commande. Un moyen simple d'ignorer les lignes vierges lors de la lecture du contenu du fichier est d'utiliser l'opérateur de test avec le -z Indicateur qui vérifie si la longueur de la chaîne est nul. Maintenant, répétons le même exemple mais cette fois avec un opérateur de test.

Tout en lisant lread faire si [[ ! -z $ lread]] puis écho $ lread fi fait < testfile 
Lignes vierges ignorées

Maintenant à partir de la sortie, vous pouvez voir les lignes vides sont ignorées.

Personnages d'échappement

Échapper aux 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 exemple de fichier qui a peu de caractères d'échappement.

Déposer avec des caractères d'évasion
Pendant que lisez lread do echo $ lread fait < testfile 
Escape Character in Linux

Vous pouvez voir sur les caractères d'échappement de sortie a perdu leur sens et seulement n et t sont imprimés au lieu de \ n et \ t. Vous pouvez utiliser -r Pour éviter l'interprétation de la barre de barre.

Pendant que vous lisez -r lread do echo $ lread < testfile 
Empêcher l'interprétation de la barre de barre

C'est tout pour cet article. Nous serions ravis de vous entendre s'il y a des commentaires ou des conseils. Vos commentaires sont ce qui nous aide à créer un meilleur contenu. Continuez à lire et continuez à soutenir.