Mittwoch, 23. Februar 2011

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.

(Date/Datum: 2009-02-08-01:05, Hits: 2445)

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.

Keine Kommentare:

Kommentar veröffentlichen