Beim Durchlaufen des Inhalts einer Datei in Bash
ist es häufig erforderlich, jede Zeile mit einem Bash-Skript aus einer Datei zu lesen. Es gibt verschiedene Ansätze, um die Zeilen aus einer Datei zu lesen. Im folgenden Beispiel haben wir zuerst beschrieben, wie Sie eine Beispieldatei erstellen und dann ein Skript ausführen, das diese Beispieldatei liest.
Erstellen Sie eine Datei zum Lesen
# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt
Wenn Sie den obigen Code ausführen, erhalten Sie das folgende Ergebnis −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Verwenden Sie Do-While
Bei diesem Ansatz verwenden wir eine do-while-Schleife, um eine Datei zu lesen., Wir geben den Dateinamen als Eingabe am Ende der Datei an. Zuerst erstellen wir ein Skript und geben ihm die Ausführungsberechtigung. Dann kann nur die Datei gelesen und das Ergebnis angezeigt werden.
#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt
Das Ausführen des obigen Codes ergibt folgendes Ergebnis −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Verwenden von for und in
Im nächsten Ansatz verwenden wir eine for-Schleife zusammen mit der in-Klausel. Hier speichern wir das Ergebnis des Befehls cat (jede Zeile) in einer Variablen, die Teil der for Schleife ist, und geben die Variable wieder.,
#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done
Wenn wir den obigen Code ausführen, erhalten wir das folgende Ergebnis −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday
Mit nur echo
können wir den Inhalt der Datei auch abrufen, indem wir nur echo. Das Ergebnis wird jedoch als Zeilenarray ausgegeben und als einzeilige Ausgabe ausgedruckt, die eine Kombination aller Zeilen anzeigt.
echo $( < a_file.txt )
Wenn wir den obigen Code ausführen, erhalten wir das folgende Ergebnis:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
Datei mit Leerzeilen lesen
Wenn eine Datei einige Zeilen enthält, die leer sind, können wir sie in der Ausgabe vermeiden, indem wir den folgenden Code verwenden., Dies verwendet das IFS (internal Field Separator) wird auf leere Zeichenfolge gesetzt, so dass die Leerzeilen als Feldtrennzeichen behandelt und in der Ausgabe vermieden werden. Angenommen, es gibt Leerzeilen zwischen der 3.und 4. Zeile, werden diese leeren Pfandrechte nicht gedruckt.
#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt
Das Ausführen des obigen Codes gibt uns das folgende Ergebnis −
MondayTuesdayWednesdayThursdayFridaySaturdaySunday