read-Funktion

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