Lesen aus einer Datei oder Benutzereingabe in Bash

Muhammad Husnain 21 Juni 2022
  1. Das BASH-Skript
  2. Eingabe von stdin in Bash-Skript
  3. Bash-Dateieingabe
Lesen aus einer Datei oder Benutzereingabe in Bash

BASH ist die Abkürzung für Bourne Again Shell, ein intelligenter Name, der sich auf Bourne Shell bezieht (d. h. von Steven Bourne erstellt). BASH ist ein Shell-Programm, das von Brian Fox als aktualisierte Version der Bourne-Shell-Anwendung sh entwickelt wurde.

In diesem Artikel werden die Eingabefunktion in Bash-Skripten und die Methoden zum Abrufen von Eingaben aus der Standardeingabekonsole und einigen spezifischen Dateien erläutert. Darüber hinaus werden wir auch mehrere Beispielskripte durchgehen, um die Idee zu veranschaulichen.

Das BASH-Skript

Eine einfache Textdatei mit einer Liste von Anweisungen, die wir normalerweise in die Befehlszeile einfügen würden, heißt Bash Shell Script. Eine Bash ist besonders nützlich, wenn eine Abfolge von Aufgaben wiederholt ausgeführt werden soll.

Anstatt jedes Mal die gleiche Abfolge von Anweisungen manuell einzutippen, kann einfach eine vorgefertigte Bash-Skriptdatei ausgeführt werden. Das erspart also viel manuelle Arbeit und spart auch Zeit.

Ein weiterer Vorteil des Bash-Skripts sind seine zwingenden Programmierfunktionen. Dies bedeutet, dass es das Schreiben von Prozeduren, bedingten Anweisungen und Schleifenstrukturen wie in den Programmiersprachen (z. B. C/C++, Javascript usw.) ermöglicht.

Bash-Skript ist eine Textdatei mit der Erweiterung .sh. Um es zu erstellen, verwenden wir den Befehl touch mit der Erweiterung .sh.

touch myscript.sh

Wir können es in jedem Texteditor öffnen, zum Beispiel gedit. Um es zu öffnen, verwenden Sie den folgenden Befehl.

Befehl:

gedit myscipt.sh

Wir verwenden die Zeile #!/bin/bash, um ein Shell-Skript zu starten. In dieser Zeile #! Ein Teil wird als shebang bezeichnet, und der verbleibende Teil ist der Pfad zum Bash-Interpreter im Betriebssystem.

Danach schreiben wir unseren erforderlichen Befehlssatz in das Skript und speichern es. Um ein Bash-Skript auszuführen, verwenden wir den Befehl bash.

Befehl:

bash myscript.sh

Dadurch wird unser Skript ausgeführt und wir erhalten die Ausgabe der im Skript verwendeten Befehle.

Eingabe von stdin in Bash-Skript

Wir können auch Benutzereingaben vom Terminal oder stdin in unser Bash-Skript übernehmen. Wir können den eingebauten Bash-Befehl read verwenden, um die Bash-Benutzereingaben zu lesen.

Es akzeptiert die Eingabe des Benutzers und weist sie einer Variablen zu. Es kann nur eine einzige Zeile aus der Bash-Shell lesen.

Syntax:

read <variable>

Jedes durch Leerzeichen getrennte Wort wird in einer anderen Variablen gespeichert.

Beispiel für ein Bash-Skript:

#!/bin/bash
echo "Enter your name: "
read userName
echo "Enter your age: "
read userAge;
echo "Enter your 3 Subjects: "
read sub1 sub2 sub3
echo "The user $userName is $userAge years old and is specialized in $sub1, $sub2, and $sub3. "

In diesem Beispiel haben wir vom Benutzer seinen Namen, sein Alter und 3 Themen eingegeben. Themen werden in separaten Variablen gespeichert.

Ausgabe:

liest nur eine einzige Zeile aus der Bash-Shell

Die Angabe des Variablennamens beim read-Befehl ist nicht obligatorisch. Wenn wir den Variablennamen nicht angeben, wird der Wert standardmäßig in der Variablen REPLY gespeichert, sodass wir ihn später in unserem Skript verwenden können.

Beispiel für ein Bash-Skript:

#!/bin/bash
echo "Enter a number from 1-10: "
read
echo "You entered: $REPLY"

Ausgabe:

speichert den Wert standardmäßig in der REPLY-Variablen

In den vorherigen Beispielen haben wir zwei Zeilen für die Eingabe verwendet, eine für die Eingabeaufforderung und die andere für den Lesebefehl. Dieser Vorgang kann auch in einer einzigen Zeile mit einem Flag -p mit dem Befehl read durchgeführt werden.

Syntax:

read -p <Prompt statement> <variable_name>

Beispiel für ein Bach-Skript:

#!/bin/bash
read -p "Please enter the name of the file: " fileName
echo "The filename you entered is: $fileName"

Ausgabe:

Verwenden Sie ein Flag -p mit dem read-Befehl

Es gibt einige Fälle, in denen wir die Benutzereingabe aus Sicherheits- und Datenschutzgründen auf dem Bildschirm verbergen müssen. Wenn wir zum Beispiel ein Passwort als Eingabe nehmen müssen, sollte es nicht auf dem Bildschirm sichtbar sein, während der Benutzer es eingibt.

Um dies zu erreichen, verwenden wir das Flag -s, um es stumm zu schalten.

Beispiel für ein Bash-Skript:

#!/bin/bash
read -p "Enter username: " userName
read -sp "Enter Password: " pass
echo
echo "Hello $userName"

Ausgabe:

Verwenden Sie das Flag -s, um die Passworteingabe auf dem Bildschirm nicht sichtbar zu machen

Wir können auch Eingaben in einem Array mit dem Flag -a entgegennehmen. Mit diesem Flag werden alle Wörter einer Zeile in den verschiedenen Indizes des Arrays gespeichert, auf die später zugegriffen werden kann.

Beispiel für ein Bash-Skript:

#!/bin/bash
echo "Enter names of 2 students: "
read -a stuNames
echo "The names of students are:${stuNames[0]}, ${stuNames[1]} "

Ausgabe:

Nehmen Sie Benutzereingaben in einem Array mit dem Flag -a entgegen

Bash-Dateieingabe

Bash-Skript kann auch Eingaben aus Dateien entgegennehmen. Der Befehl read wird zu diesem Zweck verwendet und liest die Datei Zeile für Zeile. Wir werden einige Beispiele für das Lesen von Daten aus der Datei diskutieren.

Wir können sowohl mit der Konsole als auch mit dem Skript aus Dateien lesen. Zuerst sehen wir uns den Konsolenbefehl an und bewegen uns dann zum Skript.

Angenommen, wir haben eine Datei data.txt mit Text darin wie folgt:

LG
Samsung
Bosch
Pel

Der Befehl zum Lesen dieser Datei:

while read ln; do echo $ln; done < data.txt

Ausgabe:

.txt-Dateien in BASH lesen

Wir können auch ein Skript verwenden, um aus der Datei zu lesen.

Beispiel für ein Bash-Skript:

#!/bin/bash
fname='data.txt'
a=1
while read ln; do
echo "Reading line $a : $ln"
a=$((a+1))
done < $fname

Ausgabe:

Verwenden Sie ein Skript, um aus der Datei zu lesen

Wir können den Dateinamen auch von der Befehlszeile aus lesen. Erstellen Sie eine Bash-Datei und fügen Sie das folgende Skript darin ein.

Der Dateiname wird von diesem Skript aus der Befehlszeileneingabe übernommen. Die Variable $1, die den Dateinamen zum Lesen enthält, liest den ersten Argumentwert.

Wenn die Datei an der aktuellen Position vorhanden ist, liest die While-Schleife die Datei Zeile für Zeile und gibt den Inhalt aus, genau wie im vorherigen Beispiel.

Beispiel für ein Bash-Skript:

#!/bin/bash
fname=$1
while read ln; do
echo $ln
done < $fname

Um dieses Skript auszuführen, verwenden wir den folgenden Befehl.

Befehl:

$ bash myscript.sh data.txt

Ausgabe:

Lesen Sie den Dateinamen von der Befehlszeile

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Verwandter Artikel - Bash Input