Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

read - Argumente von der Standard-Eingabe lesen und Shell- Variablen zuweisen

&pagelevel(4)&pagelevel

(read a line from standard input)


Das in die POSIX-Shell sh eingebaute Kommando read liest eine Zeile von der Standard-Eingabe. Die gelesenen Argumente der Eingabezeile weist read den beim Aufruf angegebenen Shell-Variablen der Reihe nach als Wert zu.

Als Argument-Trennzeichen erkennt read nur die Zeichen, die der Shell-Variablen IFS zugewiesen sind. Standardmäßig sind das Leer-, Tabulatorzeichen und Neue-Zeile-Zeichen.

Wenn read in einer Shell-Prozedur steht und die Standard-Eingabe nicht umgelenkt ist, hält read die Prozedur an und liest Ihre Eingaben von der Standard-Eingabe. Sobald Sie ein Neue-Zeile-Zeichen eingeben, wird die Prozedur fortgesetzt (siehe auch Beispiele auf "read Argumente von der Standard-Eingabe lesen und Shell- Variablen zuweisen (read a line from standard input)").


Syntax


read  [-option][ name?abfrage][ name]...

option

-p

Statt von der Standard-Eingabe wird von der Pipeline zu dem, durch |& erzeugten Prozess gelesen. Bei Dateiende von der Pipeline wird so bereinigt, dass durch |& ein neuer Prozess erzeugt werden kann.

-r

Im Raw-Modus hat der Gegenschrägstrich \ am Zeilenende keine Sonderfunktion, d.h. die Zeile wird nicht fortgesetzt.

-s

Die Eingabe wird als Kommando in die History-Datei geschrieben.

-udateikennzahl

Die einstellige dateikennzahl wird statt der Standard-Eingabe zum Lesen verwendet. Die Dateikennzahl kann mit dem eingebauten Kommando exec geöffnet werden. Der Standardwert für dateikennzahl ist 0.

name

Name der Shell-Variablen, der das entsprechende Argument aus der Eingabe-Zeile zugewiesen wird: Dem ersten Namen wird das erste Argument zugewiesen, dem zweiten Namen das zweite, usw., wobei dem letzten Namen der Rest der Eingabezeile zugewiesen wird.

Die Namen von Shell-Variablen müssen mit einem Buchstaben oder einem Unterstrich _ beginnen und dürfen nur Buchstaben, Ziffern und _ enthalten.

Überzählige Argumente in der Eingabe-Zeile werden der letzten Variablen des Kommandos read zugewiesen.

Überzähligen Variablen des Kommandos read wird die leere Zeichenkette zugewiesen.

Enthält das erste Argument ein ?, wird der Rest des Wortes als ein Bereitzeichen auf die Standard-Fehlerausgabe geschrieben.

name nicht angegeben:
Es wird REPLY für name verwendet.

Endestatus

0read wurde erfolgreich ausgeführt
>0read hat keine Eingabe erhalten, also nur Datei-Ende (EOF) gelesen oder Fehler.

Fehler

sh: text: not an identifier
Diese Fehlermeldung kann folgende Ursachen haben:

  • Sie haben beim Aufruf keinen Variablen-Namen angegeben, oder

  • der angegebene Name enthält unerlaubte Zeichen.


read: missing arguments

Sie haben read ohne Argumente aufgerufen.

Variable

IFS

Argument-Trennzeichen. Standardmäßig sind der Variablen IFS Leerzeichen, Tabulatorzeichen und Neue-Zeile-Zeichen zugewiesen.

PS2

Bereitzeichen, das die POSIX-Shell auf Standard-Fehlerausgabe schreibt, wenn eine Zeile mit einem abschließenden Gegenschrägstrich \ gelesen wird und die Option -r nicht angegeben war oder wenn ein Here-Dokument nicht nach einem Neue-Zeile-Zeichen beendet wird.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos read:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel 1

Das Kommando read wird in der Shell-Prozedur readtest aufgerufen. Diese Shell-Prozedur hat folgenden Inhalt:

: Aufruf mit sh readtest, wird fuer Eingabe angehalten
echo Bitte geben Sie Kunden-Namen ein:
read kunde1 kunde2 kunde3
if [ -z "$kunde1" ]
then exit 5
else echo Kunde1: $kunde1
     echo Kunde2: $kunde2
     echo Kunde3: $kunde3
fi

Die Shell-Prozedur readtest wird aufgerufen:

$ sh readtest
Bitte geben Sie Kunden-Namen ein:
Mayr Brandl Aulich Weigl
Kunde1: Mayr
Kunde2: Brandl
Kunde3: Aulich Weigl

Nach dem Aufruf gibt die Shell-Prozedur die Meldung des Kommandos echo aus und startet read.

Die Prozedur hält an, und read liest die eingegebenen Namen der Kunden.

Das Neue-Zeile-Zeichen beendet für read die Eingabe-Zeile.

Der dritten Variablen kunde3 weist read zwei Namen zu, da die Eingabe-Zeile vier Argumente enthielt.

Beispiel 2

Das Kommando read liest die erste Zeile aus einer Datei:

$ read zeile < /etc/group
$ echo $zeile
root::0:root

In diesem Fall liest read auch bei wiederholtem Aufruf immer wieder die erste Zeile der Datei /etc/group.

Beispiel 3

In der folgenden Shell-Prozedur soll das Kommando read nacheinander die Zeilen einer Datei lesen:

: Aufruf mit sh lies
exec </etc/group
for i in 1 2 3 4 5 6
do
  read satz$i
  eval echo satz$i: \$satz$i
done

Mit dem eingebauten sh-Kommando exec wird in der Shell-Prozedur lies die Standard-Eingabefür das nachfolgende Kommando read umgelenkt auf die Datei /etc/group.

Wegen der for-Schleife wird read in der Prozedur siebenmal aufgerufen. Jeder Aufruf positioniert den Lesezeiger in /etc/group auf die nächste Zeile.

Deshalb gibt echo die ersten sieben Zeilen der Datei /etc/group nacheinander aus:

$ sh lies
satz1: root::0:root
satz2: daemon::1:daemon
satz3: sys::2:sys:
satz4: bin::3:bin,admin
satz5: ces::5:
satz6: other::10:gast,mgast,tele

Die Angabe \$satz$i kann die Shell nur dann richtig auswerten, wenn sie die echo-Kommandozeile zweimal interpretiert; deshalb der Aufruf mit eval.

Beim erstenmal interpretiert die Shell nur $i, denn das erste Dollarzeichen $ ist durch den Gegenschrägstrich \ entwertet.

Beim zweitenmal interpretiert die Shell $satz[1-7].

Siehe auch

exec