read wartet, bis der Benutzer seine Eingabe mit einem Zeilenumbruch ([Enter]) abgeschlossen hat. Wird read kein Argument (Variablenname) mitgegeben, so wird die gelesene Zeile der Shellvariablen REPLY zugewiesen. Folgen dem Kommando ein oder mehrere Variablennamen, so wird der Reihe nach das erste Token der Eingabe der ersten Variable zugewiesen, das zweite Token der zweiten Variable usw. Stehen mehr Token als Variablen zur Verfügung, erhält die letzte Variable alle noch nicht zugewiesenen Token. Sind es weniger Token, bleiben die überschüssigen Variablen unbelegt.
Ein read-Aufruf blockiert, es sei denn mit der Option "-t Sekunden" ( erst ab Bash 2.04!) wurde eine Zeitspanne vereinbart, nach der das Kommando spätestens zurück kehrt, selbst wenn noch keine Eingabe durch den Benutzer erfolgte. Anhand des Rückgabestatus kann entschieden werden, ob der Timeout die Rückkehr bedingte.
Im folgenden Skriptfragment wird zur Eingabe einer Zahl aufgefordert. Solange die Eingabe nicht dem erwarteten Typ entspricht, springt der Cursor an die Eingabeposition zurück:
function writeln() { tput cup $1 $2 # Cursor positionieren tput el # Rest der Zeile löschen shift 2 # Parameter für die Koordinaten entfernen echo -n $*" " # Rest der Parameterliste ausgeben } tput clear writeln 3 5 "Beliebige Zahl eingeben:" while :; do writeln 3 30 read wert echo $wert | egrep -q '[[:digit:]]+' && break tput bel done echo "Eingabe war: $wert"
Möchten Sie die Eingaben am Bildschirm verbergen (Passworteingabe etc.), so hilft die Terminalsteuerung über das Kommando stty weiter. Der folgende Programmausschnitt schaltet die Anzeige der eingegebenen Zeichen ab:
echo -n "Passwort :" stty -echo read $password stty echo
Stand: 05.11.2009
EOF