So verwenden Sie den Read-Befehl in Linux

So verwenden Sie den Read-Befehl in Linux
Bild der Funktion „Befehl lesen“

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 readBefehl und seinen verschiedenen Optionen ausführen.

Dieser Artikel vermittelt Ihnen readanhand zahlreicher Codebeispiele die Grundlagen der Command- und ihrer Möglichkeiten.

Was ist der Lesebefehl?

Unter Linux können Sie mit dem readBefehl 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 optionsParameter verschiedene Flags an, mit denen das Verhalten des Lesebefehls geändert wird. Darüber hinaus namegibt der Parameter den Namen mehrerer Variablen an, in denen die Eingabe gespeichert wird. Wenn keine Namen angegeben werden, bleibt die Eingabe in der $REPLYBash-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:

Verwenden des Lesebefehls zum Erfassen von Benutzereingaben

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

Verwenden des Echo-Befehls zum Anzeigen der Ausgabe der Variable REPLY

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 readBefehl gefolgt vom Variablennamen ein:

Lesen des Benutzereingabewerts und Speichern in einer bestimmten Variable

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

Anzeige des erfassten Variablenwerts mit dem Echo-Befehl

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:

Lesen mehrerer Werte und Speichern in mehreren Variablen

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:

Anzeigen mehrerer Werte mit dem Echo-Befehl

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 whileSchleife, echoden Befehl und readden Befehl, gefolgt von einem bestimmten Variablennamen:

Lesen aus einer Datei mit dem Lesebefehl

Dabei whileliest die Schleife jede Zeile der „samplefile.txt“ und trägt sie in die Variable ein line. Nach dem Lesen aller Zeilen einer Datei echozeigt 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:

Lesen des Eingabewerts vom Benutzer in einer Endlosschleife

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 -pOption zusammen mit dem Lesebefehl verwenden.

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

Erstellen einer Eingabeaufforderung vor dem Lesen der Benutzereingabe

Begrenzen der Benutzereingabe beim Lesen

Möchten Sie steuern, was Benutzer eingeben können? Verwenden Sie die -nOption 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:

Lesen der Eingabe basierend auf dem angegebenen Zeichenwert

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:

Lesen und Aufteilen des Wertes basierend auf dem angegebenen Trennwert

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:

Lesen des Eingangswertes innerhalb der vorgegebenen Zeit

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 -sOption des Lesebefehls erreichen:

Verwenden der Option -s mit dem Lesebefehl, um Informationen auszublenden

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

Anzeige des erfassten Passworts mit der Option -e und dem Echo-Befehl

Hier -eermöglicht das Flag die Interpretation von Escape-Sequenzen, und \neine 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

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