Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 5 Terminal-Ein- und Ausgabe
  gp 5.1 Von Terminals zu Pseudo-Terminals
  gp 5.2 Ausgabe
    gp 5.2.1 Der echo-Befehl
    gp 5.2.2 print (Korn-Shell only)
    gp 5.2.3 Der Befehl printf
    gp 5.2.4 Der Befehl tput – Terminalsteuerung
  gp 5.3 Eingabe
    gp 5.3.1 Der Befehl read
    gp 5.3.2 (Zeilenweise) Lesen einer Datei mit read
    gp 5.3.3 Zeilenweise mit einer Pipe aus einem Kommando lesen (read)
    gp 5.3.4 Here-Dokumente (Inline-Eingabeumleitung)
    gp 5.3.5 Here-Dokumente mit read verwenden
    gp 5.3.6 Die Variable IFS
    gp 5.3.7 Arrays einlesen mit read (Bash und Korn-Shell only)
    gp 5.3.8 Shell-abhängige Anmerkungen zu read
    gp 5.3.9 Einzelnes Zeichen abfragen
    gp 5.3.10 Einzelne Zeichen mit Escape-Sequenzen abfragen
    gp 5.3.11 Passworteingabe
  gp 5.4 Umlenken mit dem Befehl exec
  gp 5.5 Filedeskriptoren
    gp 5.5.1 Einen neuen Filedeskriptor verwenden
    gp 5.5.2 Die Umlenkung <>
  gp 5.6 Named Pipes
  gp 5.7 Menüs mit select (Bash und Korn-Shell only)
  gp 5.8 dialog und Xdialog
    gp 5.8.1 Entscheidungsfrage --yesno
    gp 5.8.2 Nachrichtenbox mit Bestätigung --msgbox
    gp 5.8.3 Hinweisfenster ohne Bestätigung --infobox
    gp 5.8.4 Text-Eingabezeile --inputbox
    gp 5.8.5 Ein einfacher Dateibetrachter --textbox
    gp 5.8.6 Ein Menü --menu
    gp 5.8.7 Auswahlliste zum Ankreuzen --checklist
    gp 5.8.8 Radiobuttons zum Auswählen --radiolist
    gp 5.8.9 Fortschrittszustand anzeigen --gauge
    gp 5.8.10 Verändern von Aussehen und Ausgabe
    gp 5.8.11 Kleines Beispiel
    gp 5.8.12 Zusammenfassung
  gp 5.9 gnuplot – Visualisierung von Messdaten
    gp 5.9.1 Wozu wird gnuplot eingesetzt?
    gp 5.9.2 gnuplot starten
    gp 5.9.3 Das Kommando zum Plotten
    gp 5.9.4 Variablen und Parameter für gnuplot
    gp 5.9.5 Ausgabe von gnuplot umleiten
    gp 5.9.6 Variablen und eigene Funktionen definieren
    gp 5.9.7 Interpretation von Daten aus einer Datei
    gp 5.9.8 Alles bitte nochmals zeichnen (oder besser speichern und laden)
    gp 5.9.9 gnuplot aus einem Shellscript heraus starten (der Batch-Betrieb)
    gp 5.9.10 Plot-Styles und andere Ausgaben festlegen
    gp 5.9.11 Tricks für die Achsen
    gp 5.9.12 Die dritte Dimension
    gp 5.9.13 Zusammenfassung


Rheinwerk Computing

5.7 Menüs mit select (Bash und Korn-Shell onlytoptop

Die Bash und die Korn-Shell stellen Ihnen mit der select-Anweisung ein bequemes Konstrukt zum Erzeugen von Auswahlmenüs zur Verfügung. Der Befehl funktioniert ähnlich wie die for-Schleife, nur dass hierbei statt des Schlüsselworts for eben select steht.

select variable in menü_punkte
do
   kommando1
   ...
   kommandon
done

select führt dabei die Anzeige der Menüpunkte und deren Auswahl automatisch durch und gibt den ausgewählten Menüpunkt zurück. Hierbei können Sie die Menüpunkte wie bei for entweder in einer Liste mit Werten oder direkt die einzelnen Menüpunkte angeben. Werte und Menüpunkte sollten dabei jeweils durch mindestens ein Leerzeichen getrennt aufgeführt werden (bei Werten: abhängig von IFS). Selbstverständlich können Sie auch die Argumente aus der Kommandozeile ($*) verwenden, sofern dies sinnvoll ist. Nach dem Aufruf von select wird eine Liste der Menüpunkte auf die Standardfehlerausgabe (!) in einer fortlaufenden Nummerierung (1 bis n) ausgegeben. Dann können Sie die Auswahl anhand dieser Nummerierung bestimmen. Der entsprechend ausgewählte Menüpunkt wird dann in »variable« gespeichert. Falls Sie die benötigte Nummer ebenfalls erhalten möchten, finden Sie diese in der Variablen REPLY. Bei einer falschen Eingabe wird »variable« auf leer gesetzt.

Wenn nach der Auswahl entsprechende Kommandos zwischen do und done ausgeführt wurden, wird die Eingabeaufforderung der select-Anweisung erneut angezeigt. Bei select handelt es sich somit um eine Endlosschleife, die Sie nur mit der Tastenkombination (Strg)+(D) (EOF) oder den Befehlen exit bzw. break innerhalb von do und done beenden können (siehe Abbildung 5.2).

Hierzu ein einfaches Script:

# Demonstriert die select-Anweisung
# aselect1
select auswahl in Punkt1 Punkt2 Punkt3 Punkt4
do
   echo "Ihre Auswahl war : $auswahl"
done

Das Script bei der Ausführung:

you@host > ./aselect1
1) Punkt1
2) Punkt2
3) Punkt3
4) Punkt4
#? 1
Ihre Auswahl war : Punkt1
#? 2
Ihre Auswahl war : Punkt2
#? 3
Ihre Auswahl war : Punkt3
#? 4
Ihre Auswahl war : Punkt4
#? 0
Ihre Auswahl war :
#? (Strg)+(D)
you@host >

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 5.2   Der Ablauf der select-Anweisung


Als Prompt wird hier immer der Inhalt der Variablen PS3 angezeigt, der bei den Shells meistens mit #? vorbelegt ist. Wollen Sie ein anderes Prompt nutzen, müssen Sie diese Variable nur neu besetzen.

Natürlich eignet sich das Script »aselect1« nur zu Demonstrationszwecken. Bei einer echten Menü-Auswahl will man schließlich die Auswahl auch auswerten und entsprechend reagieren. Was eignet sich besser als eine case-Anweisung?

# Demonstriert die select-Anweisung
# aselect2
# Ein neues Auswahl-Prompt
PS3="Ihre Wahl : "
select auswahl in Punkt1 Punkt2 Punkt3 Punkt4 Ende
do
   case "$auswahl" in
      Ende)  echo "Ende"; break ;;
        "")  echo "Ungültige Auswahl" ;;
         *)  echo "Sie haben $auswahl gewählt"
   esac
done

Das Script bei der Ausführung:

you@host > ./aselect2
1) Punkt1
2) Punkt2
3) Punkt3
4) Punkt4
5) Ende
Ihre Wahl : 1
Sie haben Punkt1 gewählt
Ihre Wahl : 4
Sie haben Punkt4 gewählt
Ihre Wahl : 5
Ende

Mit select können Sie außerdem wie bei der for-Schleife auch die Liste der Menüpunkte mit den Wildcard-Zeichen *, ? und [] (Datennamengenerierung) oder mit einer Kommando-Substitution erzeugen lassen. Hier einige Beispiele:

# Listet alle Dateien mit der Endung *.c auf
select var in *.c
# Listet alle Dateien mit der Endung *.c, *.sh und *.txt auf
select var in *.c *.sh *.txt
# Listet alle aktiven User-Namen auf
select var in `who | cut -c1–8 | grep -v $LOGNAME`
# Listet alle Dateien im aktuellen Verzeichnis auf,
# die mit a beginnen
select var in `ls a*`

Hierzu noch ein relativ praktisches Beispiel. Mithilfe des Wildcard-Zeichens * werden alle sich im aktuellen Verzeichnis befindlichen Dateien ausgegeben. Anschließend werden Sie nach einer Datei gefragt, die Sie editieren wollen, welche daraufhin mit einem Editor Ihrer Wahl (hier vi) geöffnet wird und die Sie dann bearbeiten können. Dieses Script ist natürlich stark ausbaufähig:

# Demonstriert die select-Anweisung
# aselect3
# Ein neues Auswahl-Prompt
PS3="Datei zum Editieren auswählen : "
# Hier den Editor Ihrer Wahl angeben
EDIT=vi
select auswahl in * Ende
do
   case "$auswahl" in
      Ende)  echo "Ende" ; break ;;
        "")  echo "$REPLY: Ungültige Auswahl" ;;
         *)  [ -d "$auswahl" ] && \
             echo "Verzeichnis kann nicht editiert werden" &&\
             continue
             $EDIT $auswahl
             break ;;
   esac
done

Das Script bei der Ausführung:

you@host > ./aselect3
 1) 1                          27) awritepipe~
 2) acase1                     28) bestellung.txt
 3) acase1~                    29) bin
 4) aecho1                     30) data.dat
...                            ...
23) avalue~                    49) user.dat
24) awhile1                    50) zitat.txt
25) awhile1~                   51) zitat.txt~
26) awritepipe                 52) Ende
Datei zum Editieren auswählen : 2

Und zu guter Letzt können Sie mit select auch Untermenüs erzeugen, sprich mehrere select-Anweisungen verschachteln. Wollen Sie hierbei ein anderes Prompt verwenden, müssen Sie allerdings PS3 in der Verschachtelung mit einem neuen Inhalt versehen. Hier ein Beispiel eines solchen Untermenüs:

# Demonstriert die select-Anweisung
# aselect4
# Ein neues Auswahl-Prompt
PS3="Bitte wählen : "
select auswahl in A B C Ende
do
   case "$auswahl" in
      Ende)  echo "Ende" ; break ;;
        "")  echo "$REPLY: Ungültige Auswahl" ;;
         A)  select auswahla in A1 A2 A3
             do
                echo "Auswahl $auswahla"
             done ;;
         *)  echo "Ihre Auswahl war : $auswahl" ;;
   esac
done

Das Script bei der Ausführung:

you@host > ./aselect4
1) A
2) B
3) C
4) Ende
Bitte wählen : 1
1) A1
2) A2
3) A3
Bitte wählen : 2
Auswahl A2
Bitte wählen : ...


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern