Verschiedene Möglichkeiten zum Lesen von Dateien im Bash -Skript mit der THE -Schleife
- 968
- 34
- Madleen Vater
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 ++)) fertigWhile-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 erledigtRohrleitungen 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 erledigtKopfbefehl
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 5Eingabeumleitung
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 < $FILENAMELagern 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 5Dateinamen 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/passwdInterner 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 ZeilenWährend des Reads lread do echo $ lread erledigt < testfileLeere 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 < testfileLeere 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.
Während des Reads lread do echo $ lread erledigt < testfileFluchtcharakter 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 < testfileBackslash -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.
- « LFCA lernen grundlegende Dateiverwaltungsbefehle unter Linux - Teil 2
- Verschiedene Möglichkeiten, den Spaltenbefehl unter Linux zu verwenden »