Shellskript Programmierung - Teil 7 (Variablen mit der Tastatur einlesen) Es ist mal wieder
Zeit für einen neuen
Teil meines
Tutorials zur
Shellskript-Programmierung.
Dieses Mal gibt es
sogar ein kleines
Detail, dass erst in
der 3. Auflage von
'Linux. Das
distributionsunabhängige
Handbuch' enthalten
sein wird. Also ein
Vorgriff. Autor/Author: Dipl.-Inform. (FH) Steffen Wendzel (Date/Datum: 2009-02-08-01:05, Hits: 1791)
Was Variablen sind, und wie man ihnen Werte direkt zuweisen kann, dass habe ich ja bereits in den vorherigen Teilen des Tutorials erklärt. Wie aber kann man Werte von der Tastatur einlesen (bspw. damit ein Benutzer seinen Namen oder ein Passwort eingeben kann)? Die Lösung ist einfach:
Zum Einlesen von Werten wird das Kommando read verwendet. read übergibt man als Parameter den Namen einer Variablen (aber ohne $-Zeichen). Anschließend kann man auf den Wert zugreifen. Hier ein kleines Beispiel zum Einlesen eines Namens:
$ read name
Steffen Wendzel # das ist die Eingabe des Benutzers
$ echo $name
Steffen Wendzel
Wie man sieht, wird die Eingabe des Benutzers angezeigt, was etwa bei Passwörtern nicht sicher ist. Je nach verwendeter Shell sollte read den Parameter '-s' unterstützten, der die Ausgabe der eingegebenen Zeichen auf dem Terminal unterdrückt. Mit diesem können dann auch "unsichtbare" Eingaben getätigt werden:
$ read -s name
(unsichtbare Eingabe)
$ echo $name
Steffen Wendzel
Soll nun noch ein schöner Eingabetext ausgegeben werden, was mit echo ja kein Problem ist, kann man auch noch verhindern, dass die Eingabe von Passwörtern und Benutzernamen in einer neuen Zeile angezeigt wird. Einige echo-Implementierungen kennen zu diesem Zweck den Parameter '-n', der nach der Ausgabe des Textes kein Zeilenende (also kein Newline-Zeichen (\n)) ausgibt.
$ echo -n "Benutzername: "; read name
Benutzername: sw
$ echo $name
sw
Was aber, wenn man nur ein Zeichen einlesen möchte und der Benutzer nicht die Return-Taste drücken müssen soll? Dazu kann der read-Parameter '-n [Anzahl Zeichen]' verwendet werden.
read -s -n 1 befehlszeichen
echo "Es wurde das Zeichen $befehlszeichen eingegeben"
-----------
Änderungen:
- 18. Feb. 2009: '
-s'-Parameter fehlte bei read-Aufruf für die unsichtbare Eingabe eines Wertes.
____________
|