Verschiedene Möglichkeiten zum Lesen von Dateien im Bash -Skript mit der THE -Schleife

Verschiedene Möglichkeiten zum Lesen von Dateien im Bash -Skript mit der THE -Schleife

In diesem Artikel geht es darum, wie Sie Dateien in Bash -Skripten mit a lesen können while-Schleife. Das Lesen einer Datei ist eine übliche Operation bei der Programmierung. Sie sollten mit verschiedenen Methoden vertraut sein und welche Methode effizienter zu verwenden ist. In Bash kann eine einzelne Aufgabe in vielerlei Hinsicht erreicht werden, aber es gibt immer eine optimale Möglichkeit, die Aufgabe zu erledigen, und wir sollten sie folgen.

Bevor Sie sehen, wie Sie Dateiinhalte verwenden, while-Schleife, Eine kurze Grundierung darüber, wie während der Schleife funktioniert. Während die Schleife einen Zustand bewertet und über einen bestimmten Codes -Satz iteriert, wenn die Bedingung wahr ist.

während [Bedingung] Codeblock erledigt 

Lass uns zusammenbrechen while-Schleife Syntax.

  • while-Schleife Sollte mit einer Weile von Keyword gefolgt von einer Bedingung beginnen.
  • A Zustand sollte innerhalb der Einschaltung sein [] oder [[]]. Die Bedingung sollte immer wieder auftreten, damit die Schleife ausgeführt werden kann.
  • Der tatsächliche Codeblock wird dazwischen platziert Tun Und Erledigt.
Nummer = 0 während [[$ number -le 10]] echo "Willkommen $ number mal" ((Nummer ++)) fertig 
While-Schleife

Dies ist ein sehr einfaches Beispiel, bei dem die Schleife führt bis NUMMER ist nicht größer als 10 und druckt die Echo -Anweisung.

Zusammen mit während Wir werden die verwenden lesen Befehl zum Lesen des Inhalts einer Dateizeile nach Zeile. Unten finden Sie die Syntax dessen, wie während Und lesen Befehle werden kombiniert. Jetzt gibt es verschiedene Möglichkeiten, die Datei als Eingabe zu übergeben, und wir werden sie alle sehen.

# Syntax Während des Lesens Variable do Code erledigt 

Rohrleitungen in Linux

Normalerweise verwenden wir den CAT -Befehl, um den Inhalt der Datei aus dem Terminal anzuzeigen. Außerdem werden wir die Ausgabe der von der leiten Katzenbefehl zu anderen Befehlen wie Grep, Sortier usw.

Ebenso werden wir die verwenden Katzenbefehl Hier lesen Sie den Inhalt der Datei während Schleife. Zur Demonstration benutze ich /etc/passwd Datei, aber es ist nicht ratsam, sich mit dieser Datei zu messen. Nehmen Sie also eine Sicherungskopie dieser Datei ein und spielen Sie damit, wenn Sie dies wünschen.

Katze /etc /passwd | Während des Reads lread do echo $ lread erledigt 
Rohrleitungen in Linux

Lassen Sie uns aufschlüsseln, was passieren wird, wenn der obige Code eingereicht wird.

  • Katze /etc /passwd Lesen Sie den Inhalt der Datei und übergeben sie als Eingabe über das Rohr.
  • lesen Der Befehl liest jede Zeile als Eingabe vom CAT -Befehl und speichert sie in der Lead Variable.
  • lesen Der Befehl wird Dateiinhalte bis zum Lesen von Inhalten Eol wird interpretiert.

Sie können auch andere Befehle wie Kopf, Schwanz verwenden und ihn während der Schleife übergeben.

Kopf -n 5 /etc /passwd | Während des Reads lread do echo $ lread erledigt 
Kopfbefehl

Eingabeumleitung unter Linux

Wir können den Inhalt der Datei auf umleiten while-Schleife Verwenden des Eingangsumleitung Operator (<).

Während des Reads lread do echo $ lread erledigt < /etc/passwd | head -n 5 
Eingabeumleitung

Sie können den Dateinamen auch in einer Variablen speichern und ihn durch einen Umleitungsbetreiber übergeben.

FileName = "/etc/passwd" während gelesene lread do echo $ lread fertig < $FILENAME 
Lagern Sie den Dateinamen in Variable

Sie können auch Dateinamen als Argument an Ihr Skript übergeben.

Während des Reads lread do echo $ lread erledigt < $1 | head -n 5 
Dateinamen als Argument speichern

Interner Feldabscheider

Sie können mit verschiedenen Arten von Dateiformaten arbeiten (CSV, TXT, JSON) und Sie möchten möglicherweise den Inhalt der Datei basierend auf einem benutzerdefinierten Trennzeichen teilen. In diesem Fall können Sie verwenden “Interner Feldabscheider (IFS)So teilen Sie den Inhalt der Datei auf und speichern Sie sie in Variablen.

Lassen Sie mich zeigen, wie es funktioniert. Schauen Sie sich das an die /etc/passwd Datei, die einen Dickdarm hat (:) :) als Trennzeichen. Sie können jetzt jedes Wort aus einer Zeile teilen und in einer separaten Variablen speichern.

Im folgenden Beispiel trenne ich mich /etc/passwd Datei mit einem Dickdarm als mein Trennzeichen und Speichern jeder Aufteilung in verschiedene Variablen aufbewahrt.

whil ifs = ":" lesen 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 
Interner Feldabscheider

Ich habe in dem obigen Screenshot nur eine Zeile angezeigt, in der die Screenshot -Größe berücksichtigt wurde.

Leere Linien in Linux

Leere Linien werden nicht ignoriert, wenn Sie Schleife durch den Dateiinhalt. Um dies zu demonstrieren, habe ich eine Beispieldatei mit dem folgenden Inhalt erstellt. Es gibt 4 Zeilen und wenige leere Linien, die Whitespace führen, den weißen Raum, Tabellenzeichen in Zeile 2 und einige Escape -Charaktere (Fluchtzeichen\N Und \T).

Datei mit leeren Zeilen
Während des Reads lread do echo $ lread erledigt < testfile 
Leere Linie nicht ignoriert

Siehe das Ergebnis, leere Zeile wird nicht ignoriert. Eine interessante Sache ist auch zu beachten, wie weiße Räume von der beschnitten werden lesen Befehl. Eine einfache Möglichkeit, leere Zeilen beim Lesen des Dateiinhalts zu ignorieren, besteht darin, den Testoperator mit dem zu verwenden -z Flag, das überprüft, ob die Stringlänge Null ist. Wiederholen wir nun dasselbe Beispiel, diesmal aber diesmal mit einem Testoperator.

Während des Lesens lread tun, wenn [[ ! -z $ lread]] dann echo $ lread fi erledigt < testfile 
Leere Zeilen ignoriert

Jetzt werden Sie aus der Ausgabe von leeren Linien ignoriert.

Flucht Charaktere

Flucht Charaktere wie \N, \T, \C wird beim Lesen einer Datei nicht gedruckt. Um dies zu demonstrieren, verwende ich dieselbe Beispieldatei mit nur wenigen Fluchtzeichen.

Datei mit Escape -Zeichen
Während des Reads lread do echo $ lread erledigt < testfile 
Fluchtcharakter unter Linux

Sie können sehen, dass die Ausgaber Escape -Escape -Charaktere ihre Bedeutung verloren haben und nur N Und T werden gedruckt anstelle von gedruckt \N Und \T. Sie können verwenden -R Um die Interpretation der Backslash zu verhindern.

Während des Lesens -r lread echo $ lread erledigt < testfile 
Backslash -Interpretation verhindern

Das war's für diesen Artikel. Wir würden gerne von Ihnen zurück hören, wenn es Feedbacks oder Tipps gibt. Ihr Feedback hilft uns, bessere Inhalte zu erstellen. Lesen Sie weiter und unterstützen Sie weiter.