So verwenden Sie den Read-Befehl in Linux

Manchmal müssen Sie bei der Interaktion mit Ihrem Linux-System Benutzer zur Eingabe auffordern oder Eingaben aus Dateien lesen oder sogar Timeouts festlegen. Sie können diese und viele andere Aufgaben mit dem Befehl read und seinen verschiedenen Optionen ausführen.

Dieser Artikel vermittelt Ihnen anhand zahlreicher Codebeispiele die Grundlagen des Lese-Befehls und seiner Optionen.

Was ist der Lesebefehl?

Unter Linux können Sie den Befehl read verwenden, um Benutzereingaben zu erfassen oder eine Zeile von der Standardeingabe (stdin) zu lesen. Dieser Befehl liest die Gesamtzahl der Bytes aus dem angegebenen Dateideskriptor und speichert sie im Puffer. Danach gibt er die Anzahl der gelesenen Bytes, null oder einen Fehler zurück.

Wenn die Zahl oder Anzahl beispielsweise Null ist, bezieht sie sich auf das Ende der Datei. Bei Erfolg gibt sie jedoch die Anzahl der gelesenen Bytes zurück. Wenn der Lesebefehl Fehler findet, gibt er -1 zurück.

Bevor wir die Optionen des Lesebefehls untersuchen, schauen wir uns zunächst die Syntax des Lesebefehls an:

Hier gibt der Optionsparameter verschiedene Flags an, mit denen das Verhalten des Lesebefehls geändert wird. Darüber hinaus gibt der Nameparameter den Namen mehrerer Variablen an, die zum Speichern der Eingabe verwendet werden. Wenn keine Namen angegeben werden, wird die Eingabe in der Bash-Variable $REPLY gespeichert.

[enlazatom_show_links]

Befehlsoptionen lesen

Der Bash-Befehl read bietet zahlreiche Optionen zur Steuerung der Benutzereingabe. Einige Optionen erfordern keine zusätzlichen Parameter, andere schon.

Sehen wir uns einige Optionen an, die wir mit dem Lesebefehl verwenden können:

OptionenBeschreibungen
-A Es speichert die Eingabe als Array statt als separate Variablen.
-SLäuft im Hintergrund, d. h. die Eingabe wird nicht auf dem Terminal angezeigt
-eaktiviert die Readline-Bibliotheksunterstützung und ermöglicht das Lesen der Eingabezeile
-ich stellt einen anfänglichen Eingabewert bereit, der bei Verwendung von readline in der Eingabeaufforderung angezeigt wird
-P zeigt die angegebene Eingabeaufforderung an, bevor die Eingabe gelesen wird
-u liest aus einem angegebenen Dateideskriptor statt aus der Standardeingabe (stdin)
-D ermöglicht Ihnen die Angabe eines Eingabezeilen-Trennzeichens anstelle des standardmäßigen Zeilenumbruchzeichens
-T legt eine Zeitüberschreitung für die Eingabe fest. Wenn die Eingabe nicht innerhalb dieser Zeit empfangen wird, gibt read einen Fehler zurück.
-Rwenn gesetzt, werden Backslashes nicht als Escape-Zeichen behandelt
-N liest nur die angegebene Anzahl von Zeichen

Geben Sie den folgenden Befehl ein, um das Hilfemenü des gelesenen Befehls auszugeben:

So lesen Sie Eingaben mit dem Lesebefehl

Der einfachste Weg, den Lesebefehl zu verwenden, besteht darin, ihn ohne Argumente oder Optionen zu verwenden. Wenn Sie den Lesebefehl allein ausführen, werden Sie aufgefordert, die Eingabe einzugeben, die Sie lesen möchten. Nachdem Sie die Eingabe eingegeben haben, wird der Befehl beendet und in seiner Standardvariable mit dem Namen REPLY gespeichert.

Nehmen wir Folgendes als Beispiel:

Nachdem wir nun die Eingabe vorgenommen haben, zeigen wir sie mit dem Echo-Befehl an:

Während Sie den Eingabewert lesen, können Sie ihn auch in beliebigen anderen spezifischen Variablen speichern. Um beispielsweise das Ergebnis in einer Variablen zu speichern, geben Sie den Lesebefehl gefolgt vom Variablennamen ein:

Variable1 lesen Benutzereingabe>

Um nun das Ergebnis anzuzeigen, müssen Sie den Echo-Befehl mit der Variable verwenden, die Ihren Wert speichert:

Lesen mehrerer Werte

Es gibt keine direkte Möglichkeit, mehrere Werte mit dem Lesebefehl zu lesen. Sie können den einzelnen Eingabesatz jedoch in mehrere Wörter aufteilen und diese in verschiedenen Variablen speichern.

Betrachten wir das folgende Beispiel:

lesen Variable1 Variable2 Variable3 Benutzereingabe>

Dabei speichern Sie das erste Wort des Satzes in der ersten Variable, das zweite Wort in der zweiten Variable und alle restlichen Wörter in der letzten angegebenen Variable.

Lassen Sie uns die Ausgabe mit dem folgenden Befehl zurückgeben:

Lesen aus einer Datei

Während read in erster Linie für Benutzereingaben gedacht ist, können Sie damit auch Zeilen aus einer Datei lesen. Verwenden Sie dazu einfach die while-Schleife, den echo-Befehl und den read-Befehl, gefolgt von einem bestimmten Variablennamen:

während Zeile gelesen wird; echo "$line" ausführen, fertig, Beispieldatei.txt

Dabei liest die while-Schleife jede Zeile der „samplefile.txt“ und trägt sie in die Variable line ein. Nachdem alle Zeilen einer Datei gelesen wurden, zeigt der echo-Befehl den Wert der Zeile an.

Lesen von Eingaben in einer Schleife

Sie können Benutzereingaben auch in einer wiederholten Sequenz erfassen, indem Sie einen Lesevorgang mit einer While-Schleife verwenden. Dies ist nützlich, wenn Sie mehrere Eingaben erfassen oder fortfahren möchten, bis eine bestimmte Bedingung erfüllt ist.

Lassen Sie uns beispielsweise mehrere Eingaben lesen und diese auch auf dem Terminal anzeigen:

während Zeile gelesen wird; echo "Zeile: $line" ausführen, fertig

Darüber hinaus wird die Schleife fortgesetzt, bis sie ein Dateiende-Signal (EOF) empfängt, normalerweise durch Drücken von Strg + D.

So fordern Sie mit dem Lesebefehl eine Eingabe an

Sie können auch interaktive Eingabeaufforderungen erstellen, die vor der Benutzereingabe angezeigt werden. Sie können dies erreichen, indem Sie die Option -p zusammen mit dem Lesebefehl verwenden.

Lassen Sie uns eine benutzerdefinierte Eingabeaufforderung anzeigen und auch die Eingabe erfassen:

read -p "Geben Sie Ihren Namen ein: " Name

Begrenzen der Benutzereingabe beim Lesen

Möchten Sie steuern, was Benutzer eingeben können? Verwenden Sie die Option -n mit read, um die gewünschte Zeichenlänge anzugeben. Wenn Sie beispielsweise die ersten 4 Zeichen der Benutzereingabe erfassen möchten, verwenden Sie den folgenden Befehl:

Nach der Ausführung des obigen Befehls können Sie nur neun Zeichen eingeben. Durch die Begrenzung der Benutzereingabe beim Lesen wird kein Trennzeichen mehr benötigt und die Eingabe wird auch nicht in Wörter aufgeteilt.

Trennen von Ausgabefeldern mit IFS

Sie können die Variable „Interner Feldtrenner“ (IFS) mit dem Lesebefehl verwenden, um zu bestimmen, wie die Eingabe in separate Felder aufgeteilt wird. Standardmäßig verwendet IFS Leerzeichen (Tabulator, Zeilenumbruch und Leerzeichen) als Feldtrennzeichen. Sie können das IFS jedoch an Ihre Anforderungen anpassen.

Sie können beispielsweise den Doppelpunkt (:) als Trennzeichen angeben:

IFS=':' Name Passwort Benutzereingabe lesen> echo "Name: $name, Passwort: $password"

Mit der IFS-Variable können Sie mehrzeilige Eingaben des Benutzers erfassen und diese basierend auf dem Trennzeichenwert trennen.

Festlegen des Timeouts beim Lesen

Mit der Option -t können Sie außerdem ein Timeout für den Lesebefehl konfigurieren. Dies ist nützlich, wenn Sie sicherstellen möchten, dass das Skript nicht über einen längeren Zeitraum auf Benutzereingaben angewiesen ist.

Lassen Sie uns mit der Option -t ein Timeout von 10 Sekunden festlegen:

read -t 10 -p "Geben Sie Ihren Namen ein (Timeout 10 Sekunden): " name user_input> echo "Hallo, $name!"

Wenn der Benutzer innerhalb von 10 Sekunden nichts eingibt, wird die Ausführung des Skripts fortgesetzt.

So verbergen Sie Benutzereingaben

Manchmal möchten Sie die Eingaben des Benutzers verbergen, beispielsweise bei der Eingabe vertraulicher Informationen wie Passwörter. Sie können dies mit der Option -s des Befehls read erreichen:

read -s -p "Geben Sie Ihr Passwort ein: " password user_input>

Nachdem Sie das Passwort in der angegebenen Variable gespeichert haben, können Sie es mit dem Echo-Befehl im Terminal anzeigen:

echo -e "\nPasswort: $passwort"

Hier ermöglicht das Flag -e die Interpretation von Escape-Sequenzen, und die Escape-Sequenz \n fügt vor der Ausgabe eine neue Zeile hinzu.

Einpacken

Wenn Sie diesen Artikel gelesen und die Beispiele durchgearbeitet haben, sind Sie mit der Verwendung des Lesebefehls im Linux-Terminal vertraut. Es gibt jedoch noch viele weitere Befehle, die Sie erkunden können. Lesen Sie weiter, um die grundlegenden Befehle für Neulinge kennenzulernen.

Gabriel Heinzer via Unsplash. Alle Screenshots von Haroon Javed.

Index
  1. Was ist der Lesebefehl?
  2. Befehlsoptionen lesen
  3. So lesen Sie Eingaben mit dem Lesebefehl
    1. Lesen mehrerer Werte
    2. Lesen aus einer Datei
    3. Lesen von Eingaben in einer Schleife
  4. So fordern Sie mit dem Lesebefehl eine Eingabe an
  5. Begrenzen der Benutzereingabe beim Lesen
  6. Trennen von Ausgabefeldern mit IFS
  7. Festlegen des Timeouts beim Lesen
  8. So verbergen Sie Benutzereingaben
  9. Einpacken

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Go up