read(1) read(1)
NAME
read - Argumente von der Standard-Eingabe lesen und Shell-Variablen
zuweisen
SYNTAX
read name ...
BESCHREIBUNG
Das in die Shell sh(1) bzw. ksh(1) eingebaute Kommando read liest eine
Zeile von der Standard-Eingabe. Die gelesenen Argumente der Eingabe-
zeile 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 die Prozedur fortgesetzt (siehe auch BEISPIELE).
ARGUMENTE
Die Korn-Shell ksh unterstützt zusätzliche Optionen [siehe ksh(1)].
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 Zei-
chenkette zugewiesen.
ENDE-STATUS
0 read wurde erfolgreich ausgeführt
>0 read hat keine Eingabe erhalten, also nur Datei-Ende (EOF) gele-
sen.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
read(1) read(1)
FEHLERMELDUNGEN
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.
UMGEBUNGSVARIABLE
IFS Argument-Trennzeichen. Standardmäßig sind der Variablen IFS Leer-
zeichen, Tabulatorzeichen und Neue-Zeile-Zeichen zugewiesen.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
BEISPIELE
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
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
read(1) read(1)
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 einge-
gebenen 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 immmer 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 7
do
read satz$i
eval echo satz$i: \$satz$i
done
Mit dem eingebauten Shell-Kommando exec wird in der Shell-Prozedur
lies die Standard-Eingabe fü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: uucp::4:
satz6: ces::5:
satz7: other::10:gast,mgast,tele
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
read(1) read(1)
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].
HINWEISE
Bei der Verwendung von read können sich Abweichungen im Verhalten
ergeben, je nachdem, welche Shell benutzt wird. Die möglichen Abwei-
chungen sind nicht eigens beschrieben.
SIEHE AUCH
exec(1), ksh(1), sh(1).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98