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 read
Befehl und seinen verschiedenen Optionen ausführen.
Dieser Artikel vermittelt Ihnen read
anhand zahlreicher Codebeispiele die Grundlagen der Command- und ihrer Möglichkeiten.
Was ist der Lesebefehl?
Unter Linux können Sie mit dem read
Befehl Benutzereingaben erfassen oder eine Zeile von der Standardeingabe (stdin) 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 options
Parameter verschiedene Flags an, mit denen das Verhalten des Lesebefehls geändert wird. Darüber hinaus name
gibt der Parameter den Namen mehrerer Variablen an, in denen die Eingabe gespeichert wird. Wenn keine Namen angegeben werden, bleibt die Eingabe in der $REPLY
Bash-Variable erhalten.
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:
Optionen | Beschreibungen |
---|---|
-a <Feld> | Es speichert die Eingabe als Array statt als separate Variablen. |
-S | Läuft im Hintergrund, d. h. die Eingabe wird nicht auf dem Terminal angezeigt |
-Es ist | aktiviert die Readline-Bibliotheksunterstützung und ermöglicht das Lesen der Eingabezeile |
-i <Präfix> | stellt einen anfänglichen Eingabewert bereit, der bei Verwendung von readline in der Eingabeaufforderung angezeigt wird |
-p <Eingabeaufforderung> | zeigt die angegebene Eingabeaufforderung an, bevor die Eingabe gelesen wird |
-u <Dateideskriptor> | liest aus einem angegebenen Dateideskriptor statt aus der Standardeingabe (stdin) |
-d <Trennzeichen> | ermöglicht Ihnen die Angabe eines Eingabezeilen-Trennzeichens anstelle des standardmäßigen Zeilenumbruchzeichens |
-t <Zeit> | legt eine Zeitüberschreitung für die Eingabe fest. Wenn die Eingabe nicht innerhalb dieser Zeit empfangen wird, gibt read einen Fehler zurück. |
-R | wenn gesetzt, werden Backslashes nicht als Escape-Zeichen behandelt |
-n <Zahl> | 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 gespeichert REPLY
.
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 read
Befehl gefolgt vom Variablennamen ein:
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, mit dem Befehl mehrere Werte zu lesen read
. Sie können den einzelnen Eingabesatz jedoch in mehrere Wörter aufteilen und diese in verschiedenen Variablen speichern.
Betrachten wir das folgende Beispiel:
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, echo
den Befehl und read
den Befehl, gefolgt von einem bestimmten Variablennamen:
Dabei while
liest die Schleife jede Zeile der „samplefile.txt“ und trägt sie in die Variable ein line
. Nach dem Lesen aller Zeilen einer Datei echo
zeigt der 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:
Darüber hinaus wird die Schleife fortgesetzt, bis sie ein Dateiende-Signal (EOF) empfängt, normalerweise durch Drücken Ctrlvon + 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 -p
Option zusammen mit dem Lesebefehl verwenden.
Lassen Sie uns eine benutzerdefinierte Eingabeaufforderung anzeigen und auch die Eingabe erfassen:
Begrenzen der Benutzereingabe beim Lesen
Möchten Sie steuern, was Benutzer eingeben können? Verwenden Sie die -n
Option 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:
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 können Sie auch ein Timeout für den Lesebefehl konfigurieren -t
. 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 folgenden Option ein Timeout von 10 Sekunden festlegen -t
:
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 -s
Option des Lesebefehls erreichen:
Nachdem Sie das Passwort in der angegebenen Variable gespeichert haben, können Sie es mit dem folgenden Befehl im Terminal anzeigen echo
:
Hier -e
ermöglicht das Flag die Interpretation von Escape-Sequenzen, und \n
eine Escape-Sequenz 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.
Bildnachweis: Gabriel Heinzer via Unsplash . Alle Screenshots von Haroon Javed.
Schreibe einen Kommentar