GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash las Befehl

Bash wird mit einer Reihe integrierter Befehle ausgeliefert, die Sie auf der Befehlszeile oder in Ihren Shell-Skripten verwenden können.

In diesem Artikel untersuchen wir das integrierte read Befehl.

Bash read Eingebaut #

read ist ein in Bash eingebauter Befehl, der eine Zeile aus der Standardeingabe (oder aus dem Dateideskriptor) liest und die Zeile in Wörter aufteilt. Das erste Wort wird dem Vornamen zugeordnet, das zweite dem Nachnamen usw.

Die allgemeine Syntax des read built-in hat folgende Form:

read [options] [name...]

Um zu veranschaulichen, wie der Befehl funktioniert, öffnen Sie Ihr Terminal und geben Sie read var1 var2 ein , und drücken Sie „Enter“. Der Befehl wartet darauf, dass der Benutzer die Eingabe eingibt. Geben Sie zwei Wörter ein und drücken Sie „Enter“.

read var1 var2Hello, World!

Die Wörter werden den Namen zugeordnet, die dem read übergeben werden Befehl als Argumente. Verwenden Sie echo oder printf um es zu überprüfen:

echo $var1echo $var2
Hello, World!

Anstatt am Terminal zu tippen, können Sie die Standardeingabe an read übergeben mit anderen Methoden wie Piping, Here-String oder Heredoc:

echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
read und echo sind in Klammern eingeschlossen und werden in derselben Subshell ausgeführt.
Hello, World!

Hier ist ein Beispiel mit einem Here-String und printf :

read -r var1 var2 <<< "Hello, World!"printf "var1: %s \nvar2: %s\n" "$var1" "$var2"
Var1: Hello, 
Var2: World! 

Wenn kein Argument für read bereitgestellt wird Befehl wird die gesamte Zeile dem REPLY zugewiesen Variable:

echo "Hello, world!" | (read; echo "$REPLY")
Hello, World!

Wenn die Anzahl der Argumente an read übergeben wird größer ist als die Anzahl der aus der Eingabe gelesenen Wörter, werden die restlichen Wörter dem Nachnamen zugeordnet:

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
Var1: Linux 
Var2: is awesome.

Andernfalls, wenn die Anzahl der Argumente kleiner als die Anzahl der Namen ist, wird den verbleibenden Namen ein leerer Wert zugewiesen:

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3")
Var1: Hello, 
Var2: World! 
Var3: 

Standardmäßig read interpretiert den Backslash als Escape-Zeichen, was manchmal zu unerwartetem Verhalten führen kann. Um das Backslash-Escape zu deaktivieren, rufen Sie den Befehl mit -r auf Option.

Unten ist ein Beispiel, das zeigt, wie read funktioniert, wenn es mit und ohne -r aufgerufen wird Möglichkeit:

read <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, tWorld!
read -r <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, \tWorld!

Generell sollten Sie immer read verwenden mit dem -r Option.

Ändern des Trennzeichens #

Das Standardverhalten von read besteht darin, die Zeile mit einem oder mehreren Leerzeichen, Tabulatoren und Zeilenumbrüchen als Trennzeichen in Wörter aufzuteilen. Um ein anderes Zeichen als Trennzeichen zu verwenden, weisen Sie es dem IFS zu Variable (Interner Feldtrenner).

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Wenn IFS auf ein anderes Zeichen als Leerzeichen oder Tabulator eingestellt ist, werden die Wörter durch genau ein Zeichen getrennt:

echo "Linux::is:awesome." | \  (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3 \nVar4: $var4")

Die Zeile ist in vier Wörter unterteilt. Das zweite Wort ist ein leerer Wert, der das Segment zwischen den Trennzeichen darstellt. Es entsteht, weil wir zwei Trennzeichen nebeneinander verwendet haben (:: ).

Var1: Linux 
Var2:  
Var3: is 
Var4: awesome.

Sie können mehr als ein Trennzeichen verwenden, um die Zeile zu teilen. Weisen Sie bei der Angabe mehrerer Trennzeichen die Zeichen dem IFS zu Variable ohne Leerzeichen dazwischen.

Hier ist ein Beispiel mit _ ein - als Trennzeichen:

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Eingabeaufforderungszeichenfolge #

Beim Schreiben interaktiver Bash-Skripte können Sie den read verwenden Befehl, um die Benutzereingabe abzurufen.

Um eine Aufforderungszeichenfolge anzugeben, verwenden Sie -p Möglichkeit. Die Eingabeaufforderung wird vor dem read gedruckt wird ausgeführt und enthält keinen Zeilenumbruch.

Hier ist ein einfaches Beispiel:

read -r -p "Are you sure?"

Im Allgemeinen würden Sie den read verwenden Befehl innerhalb eines while Schleife, um den Benutzer zu zwingen, eine der erwarteten Antworten zu geben.

Der folgende Code fordert den Benutzer zum Neustart des Systems auf:

while true; do
    read -r -p "Do you wish to reboot the system? (Y/N): " answer
    case $answer in
        [Yy]* ) reboot; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer Y or N.";;
    esac
done

Wenn das Shell-Skript Benutzer auffordert, vertrauliche Informationen wie ein Passwort einzugeben, verwenden Sie -s Option, die read mitteilt um die Eingabe nicht auf dem Terminal auszudrucken:

read -r -s -p "Enter your password: "

Ordnen Sie die Wörter dem Array # zu

Um die Wörter anstelle von Variablennamen einem Array zuzuweisen, rufen Sie read auf Befehl mit dem -a Möglichkeit:

read -r -a MY_ARR <<< "Linux is awesome."

for i in "${MY_ARR[@]}"; do 
  echo "$i"
done
Linux 
is 
awesome.

Wenn sowohl ein Array- als auch ein Variablenname angegeben werden, werden alle Wörter dem Array zugewiesen.

Schlussfolgerung #

Der read Der Befehl wird verwendet, um eine Eingabezeile in Wörter aufzuteilen.


Linux
  1. Bash-Skript – Beispiel „Hello World“.

  2. apachectl von bash starten

  3. Bash-Exportbefehl

  4. Bash - Datumsbefehl und Leerzeichen

  5. Bash wenn auf einer einzigen Zeile

Bash-Quellbefehl

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash Exit-Befehl und Exit-Codes

Bash-printf-Befehl

Bash-Skripting (II)

Bash-Scripting(III)