# Werte einlesen mit read

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...`