Einführung
Die Bash read
command ist ein integriertes Dienstprogramm, das Text aus der Standardeingabe liest. Das Tool bietet viele Funktionen zum Lesen von Benutzereingaben und hilft dabei, Bash-Skripte interaktiv zu machen.
Diese Anleitung erklärt, wie der Bash read
command funktioniert durch verschiedene Beispiele und Anwendungsfälle.
Voraussetzungen
- Zugriff auf die Befehlszeile/das Terminal.
- Grundlagen der Arbeit mit Umgebungsvariablen.
Bash-Lese-Syntax
Die Syntax für die Bash read
Befehl ist:
read <options> <arguments>
Der read
Der Befehl nimmt die Benutzereingabe und teilt die Zeichenfolge in Felder auf, wobei jedes neue Wort einem Argument zugeordnet wird. Wenn es weniger Variablen als Wörter gibt, read
speichert die verbleibenden Terme in der letzten Variablen.
Die Angabe der Argumentnamen ist optional. Der Befehl speichert die Eingabe eines Benutzers in $REPLY
Variable standardmäßig.
Bash-Leseoptionen
Die Bash read
Der Befehl enthält viele Optionen zur Steuerung der Benutzereingabe. Einige Optionen erfordern keine zusätzlichen Parameter, während andere obligatorische Parameter haben.
Die folgende Tabelle zeigt alle möglichen Befehlsoptionen und ihre Beschreibung.
Option | Beschreibung |
---|---|
-a <array> | Weist die bereitgestellte Wortfolge einer Variablen mit dem Namen <array> zu . |
-d <delimiter> | Liest eine Zeile bis zum angegebenen <delimiter> statt einer neuen Zeile. |
-e | Startet eine interaktive Shell-Sitzung, um die zu lesende Zeile zu erhalten. |
-i <prefix> | Fügt Anfangstext hinzu, bevor eine Zeile als Präfix gelesen wird. |
-n <number> | Kehrt nach dem Lesen der angegebenen Anzahl von Zeichen zurück, wobei das Trennzeichen berücksichtigt wird, um vorzeitig zu beenden. |
-N <number> | Gibt zurück, nachdem die angegebene Anzahl von Zeichen gelesen wurde, wobei das Trennzeichen ignoriert wird. |
-p <prompt> | Gibt die Aufforderungszeichenfolge aus, bevor die Benutzereingabe gelesen wird. |
-r | Backslashes deaktivieren, um Zeichen zu entkommen. |
-s | Gibt die Eingabe des Benutzers nicht wieder. |
-t <time> | Der Befehl läuft nach der angegebenen Zeit in Sekunden ab. |
-u <file descriptor> | Aus Dateideskriptor statt Standardeingabe lesen. |
Lesen Sie weiter, um zu sehen, wie der Lesebefehl funktioniert arbeitet durch verschiedene Beispiele.
Bash-Lesebeispiele
Der read
Befehlsfunktionen ohne Argumente oder Optionen. Führen Sie die folgenden Schritte aus, um den Befehl zu testen:
1. Öffnen Sie das Terminal.
2. Schreiben Sie den Befehl und drücken Sie Enter :
read
Die Eingabeaufforderung wartet auf die Benutzereingabe.
3. Geben Sie einen Satz ein und drücken Sie Enter .
Das Terminal kehrt in seinen normalen Zustand zurück.
4. Rufen Sie die Nachricht mit dem echo-Befehl ab:
echo $REPLY
Die $REPLY
Variable speichert den read
Befehlsnachricht.
Nachfolgend finden Sie Beispiele, die komplexere Anwendungsfälle für das Bash-read
demonstrieren Befehl.
Argumente
Speichern Sie die Benutzereingabe in einer angegebenen Variablen, indem Sie ein Argument angeben:
read input
Rufen Sie die Nachricht ab mit:
echo $input
Alternativ können Sie die Benutzereingabe aufteilen in verschiedene Variablen durch Hinzufügen mehrerer Argumente.
Zum Beispiel:
read var1 var2
Die Benutzereingabe wird in einzelne Wörter aufgeteilt. Rufen Sie sie ab mit:
echo $var1
echo $var2
Wenn die Benutzereingabe mehr Wörter enthält als Variablen vorhanden sind, werden die zusätzlichen Wörter der zuletzt bereitgestellten Variablen zugewiesen:
read var1 var2
foo bar baz
echo $var1
echo $var2
Wenn es weniger Wörter als Variablen gibt, sind die restlichen Variablen leer.
Rohrleitung
Piping nimmt die Standardausgabe eines Befehls und parst sie als Standardeingabe für einen anderen Prozess. Verwenden Sie echo
und leiten Sie die Informationen an read
weiter zum sofortigen Parsen. Zum Beispiel:
echo "Hello world!" | (read var1 var2; echo $var1; echo $var2)
Die Klammern erstellen eine Subshell mit mehreren Befehlen, und die einzelnen Variablen werden auf der Konsole ausgegeben.
Heredoc
Eine andere Möglichkeit, Text in read
einzugeben Der Befehl verwendet die Heredoc-Notation. Zum Beispiel:
read var1 var2 <<< "Hello world!"
echo $var1
echo $var2
Der read
Der Befehl erwartet ein Eingabestromliteral und die Umleitungskennung (<<<
) gibt den Herestring ein.
Trennzeichen
Der read
Der Befehl definiert zwei Arten von Trennzeichen:
1. Das Trennzeichen für den read
Befehl.
Standardmäßig Enter drücken (newline) beendet den Befehl. Fügen Sie das -d
hinzu -Tag und stellen Sie ein anderes Trennzeichen in Anführungszeichen bereit, um anders zu enden.
Zum Beispiel:
read -d "-"
Anstelle einer neuen Zeile ist das neue Trennzeichen ein Bindestrich (-
) anstelle einer neuen Zeile. Der Befehl bricht beim Erreichen des Trennzeichens ab, unabhängig von der Anzahl der Argumente. Die Antwort in $REPLY
oder die bereitgestellte Variable speichert die Benutzereingabe ohne Bindestrich (-
).
2. Das Trennzeichen zum Teilen von Feldern.
Die Variable $IFS
(Internal Field Separator) speichert die Wortbegrenzer. Der Standardwert, durch den Wörter getrennt werden, ist ein Leerzeichen " ". Legen Sie $IFS
fest Variable auf einen anderen Wert, um dieses Verhalten zu steuern.
Um beispielsweise Wörter durch Bindestriche zu trennen, verwenden Sie:
IFS="-"
echo "Hello-world!" | (read var1 var2; echo $var1; echo $var2)
Fügen Sie verschiedene Trennzeichen hinzu, um Felder nach verschiedenen Werten aufzuteilen:
IFS="-_"
echo "Hello_world-!" | (read var1 var2 var3; echo $var1; echo $var2; echo $var3)
Das Trennzeichen ist ein Zeichen lang und $IFS
nimmt jeden angegebenen Teiler einzeln.
Eingabeaufforderung
Verwenden Sie den Lesebefehl, um interaktive Eingabeaufforderungen zu erstellen. Fügen Sie -p
hinzu -Tag und geben Sie den Eingabeaufforderungstext ein, zum Beispiel:
read -p "Enter your username: " username
Der Eingabeaufforderungstext wird gedruckt und erfordert eine Benutzereingabe. Der Text wird in der Variablen $username
gespeichert .
echo Your username is $username.
Verwenden Sie das -p
Option in Bash-Skripten, um mit der Erstellung von Eingabeaufforderungen zu arbeiten.
Benutzereingaben ausblenden
Der read
Befehl bietet das -s
-Tag, um die Eingabe vertraulicher Informationen zu verbergen. Ein häufiger Anwendungsfall ist die Kombination von -s
mit dem -p
-Tag, um eine Passwortabfrage zu erstellen.
Zum Beispiel:
read -p "Enter your password: "$'\n' -s password
Die Eingabe des Benutzers ist unsichtbar. Beim Wiederholen der Nachricht wird jedoch das Kennwort angezeigt:
echo $password
Seien Sie vorsichtig mit diesem Verhalten, wenn Sie read
verwenden in Skripten, die zur Eingabe von Passwörtern auffordern.
Zeichenbegrenzung festlegen
Der Lesebefehl bietet zwei Möglichkeiten, die Zeichenanzahl für die Benutzereingabe zu begrenzen:
1. Verwenden Sie -n
Option und geben Sie eine Zahl ein, um die Zeichenbegrenzung festzulegen. Zum Beispiel:
read -n 3
Drücken Sie Eingabe nach einem Zeichen, um den Befehl vor Erreichen der Zeichenbegrenzung zu beenden. Ohne Enter zu drücken , wird der Befehl nach drei Zeichen automatisch beendet.
2. Verwenden Sie das -N
Option und geben Sie eine Zahl an, um die Zeichenbegrenzung festzulegen, während Sie das Trennzeichen ignorieren. Zum Beispiel:
read -N 3
Enter drücken beendet den Befehl nicht. Der Tastendruck zählt jedoch als Zeichen.
Zeitlimit festlegen
Legen Sie ein Zeitlimit für read
fest um die für die Texteingabe benötigte Zeit zu begrenzen:
read -t 5
Der Befehl endet automatisch nach dem angegebenen Zeitlimit.
Arrays
Anstatt einzelne Variablen zum Speichern einer Zeichenfolge zu verwenden, fügen Sie -a
hinzu Option zum Speichern der Eingabe in einem Array. Zum Beispiel:
read -a array <<< "Hello world!"
Rufen Sie die Array-Elemente ab mit:
echo ${array[0]}
echo ${array[1]}
Verwenden Sie alternativ eine for-Schleife, um das Array zu durchlaufen.
Escapezeichen und Backslashes
Der read
Der Befehl ermöglicht das Aufteilen langer Eingaben in mehrere Zeilen mithilfe von Backslashes. Zum Beispiel:
read password prompt terminal output
Hello \
world\
!
Enter drücken nach dem umgekehrten Schrägstrich beendet den Befehl nicht und erwartet weitere Eingaben in der folgenden Zeile.
Um die Backslash-Interpretation zu ignorieren, fügen Sie das -r hinzu Möglichkeit:
read -r <<< "Hello\world!"; echo $REPLY
Verwenden Sie diese Option beim Analysieren von Dateipfaden und jeglichem Text, bei dem der umgekehrte Schrägstrich eine Bedeutung hat.