Mit read
werden in Shellprogrammen Variablen mit Eingabewerten belegt:
#!/bin/sh
# numerischen Wert einlesen
a= # a loeschen
while [ -z "$a" ]; do
echo -n "Geben Sie eine Zahl ein: "
read a
a=${a##*[^0-9,' ',-]*}
if [ -z "$a" ]; then
echo "Ungueltige Eingabe!"
fi
done
echo $a
|
Mit einem Aufruf können mehrere Werte eingelesen werden:
#!/bin/sh
echo -n "Bitte Alter und Name eingeben: "
read alter name
echo "$name ist $alter Jahre alt."
|
read
belegt der Reihe nach die Variablen mit den Eingaben. Im Normalfall ist jede durch
ein Leerzeichen oder einen Tabulator begrenzte Zeichenkette für read
eine neue Eingabe. Dieses Trennzeichen kann aber beliebig mittels der Shellvariablen IFS
geändert werden.
Konnte read
nur weniger Eingaben als gefordert lesen, wird den restlichen Variablen
nichts zugewiesen; stehen mehr Zeichenketten in der Eingabe, erhält die letzte Variable alle noch
nicht zugewiesenen Zeichenketten. Zur Demonstration starten wir das obige Shellskript:
user@sonne> ./beispiel_skript
Bitte Alter und Name eingeben: 0815 Homer Simpson
Homer Simpson ist 0815 Jahre alt.
|
Mit der Option -p
wird read
ein Eingabeprompt erzeugen:
user@sonne> read -p "Prompt:> " testvar
Prompt:> a stupid example
user@sonne> echo $testvar
a stupid example
|
Anstatt eine Liste von Variablen für das Einlesen von Werten zu benutzen, ist es einfacher, ein
Feld (array) zu verwenden. Unabhängig von der Anzahl der Elemente in der Eingabe wird die Array-Variable
genau mit der richtigen Größe angelegt.
user@sonne> read -a array
Zugriff auf die Elemente:
user@sonne> echo "1.Element ${array[0]}, 2.Element ${array[1]}..."
1.Element Zugriff, 2.Element auf...
|