a=$(dialog --title "Titel" --backtitle "Hintergrundtitel" --stdout --radiolist "AUSWAHLÜBERSCHRIFT" 10 40 3 MARKE-1 "INFO-1" on MARKE-2 "INFO-2" off MARKE-3 "INFO-3" off)
Auf diese Weise setzen Sie eine Datensatz-Auswahl für eine Bearbeitungsmaske um. Dabei erstellt das Skript die Auswahl dynamisch aus der Datenabfrage. Die Marke besteht aus der Datensatznummer oder dem eindeutigen Merkmal, mit dem das Skript den Datensatz anschließend für die Maske einliest.
Das Beispiel in Listing 15 zeigt eine SQL-Abfrage mit dem Client Psql für die PostgreSQL-Datenbank. Ziel ist es, die Kundennummer orgnr an den weiteren Teil des Skripts zu übergeben. Die Anweisungen für das Menü mittels --radiolist schreibt das Skript in eine Variable und führt den Code mit eval aus. Für das weitere Gestalten eignen sich je nach Programmierstil die Fenstertypen --form oder --inputmenu.
Listing 15
#!/bin/sh
# Suchmaske für die Datenbankabfrage
sube=$(dialog --title "Kundensuche" --backtitle "Kundendatenverwaltung" --stdout --inputbox "Kundenname eingeben" 0 0 "")
# Prüfen, ob es zutreffende Daten gibt
a=$(psql -t -c "select orgnr from kunden where name = '$sube';")
if [ -z "$a" ]; then
dialog --title "Kundensuche" --backtitle "Kundendatenverwaltung" --msgbox "Keine passenden Datensätze gefunden! " 0 0
exit # oder break, wenn in Schleife!
fi
# Daten für die Einfachauswahl holen und Aufbau Auswahl
#Zähler für den ersten "on"-Status
v=0
teil1=$(echo "a=\`dialog --title \"Kundensuche\" --backtitle \"Kundendatenverwaltung\" --stdout --radiolist \"gefunden: \" 10 40 3 ")
# Kundennummern ermitteln
for i in $(psql -t -c "select orgnr from kunden where name = '$sube' order by name, vorname, gebdat ;"); do
if [ $v -eq 0 ]; then
status="on"
v=1
else
status="off"
fi
info=$(psql -t -c "select (name || ' ' || vorname || ' ' || gebdat) from kunden where orgnr = $i;";)
teil2=`echo $teil2 $i \"$info\" $status`
done
auswahlmaske=$(echo "$teil1 $teil2\`")
echo $auswahlmaske
eval $auswahlmaske
dialog --title "Kundensuche" --backtitle "Kundendatenverwaltung" --msgbox "Datensatz Nr. $a ausgewählt " 0 0
Menüs zur Programmsteuerung gelingen mit dem Fenstertyp --menu. Er gibt eine Marke aus, die Sie anschließend auswerten. Wie bei fast allen anderen Wertübergaben schalten Sie auch hier --stdout vor den Fenstertyp. Ein Beispiel dazu zeigt Listing 16.
Listing 16
#!/bin/sh
while true; do
a=`dialog --title "TITEL" --backtitle "HINTERGRUNDTITEL" --stdout --menu "MENÜÜBERSCHRIFT" 0 0 0 1 "ERSTE" 2 "ZWEITE" 9 "ENDE"`
if [ $a -eq 1 ]; then
dialog --title "Titel" --backtitle "Hintergrundtitel" --msgbox "Erster Eintrag gewählt" 0 0
elif [ $a -eq 2 ]; then
dialog --title "Titel" --backtitle "Hintergrundtitel" --msgbox "Zweiter Eintrag gewählt" 0 0
elif [ $a -eq 9 ]; then
dialog --title "Titel" --backtitle "Hintergrundtitel" --no-label "Programmende" --yes-label "Weitermachen" --yesno "Programmende ?" 0 0
if [ $? -eq 1 ]; then
break # oder exit
fi
fi
done
Fazit
Möchten Sie Ihre Shell-Skripts mit einer benutzerfreundlichen Oberfläche aufwerten, so finden Sie alles dazu Notwendige im Fundus von Dialog. Benötigen Sie nur einfache Abfrage, dann profitieren Sie sogar von den Vorteilen bereits vorgefertigter Bausteine. Andernfalls stellt sich vermutlich ohnehin die Frage nach einer Alternative zum Shell-Code.
Infos
- Readpreprompt: http://www.kev.pulo.com.au/readpreprompt/
- Dialog: http://invisible-island.net/dialog/
- Xdialog: http://xdialog.free.fr/
- Zenity: https://live.gnome.org/Zenity
- Kdialog (gehört zu KDE SC): http://www.kde.org
- Gtkdialog: http://code.google.com/p/gtkdialog/






