--extra-button --extra-label "Text"
Beim Betätigen erhalten Sie den Rückgabewert 3. Die zweite Erweiterungsmöglichkeit besteht mit der Hilfe-Fläche --help-button. Sie benötigen hier keine weiteren Angaben zur Beschriftung, der Rückgabewert beträgt 2. Zusammen mit Ja (0) und Nein (1) erzeugt das Widget also vier Rückgabewerte.
Das kleine Skript aus Listing 7 zeigt die Wirkungsweise. Sie sehen darin, wie Sie eine Schaltfläche abweichend beschriften oder belegen. Der Befehl im ersten Aufruf ist entsprechend ergänzt. Sie finden vor dem Parameter --yesno den zusätzlichen Parameter --ok-label "Text".
Listing 7
#! /bin/sh
while true; do
dialog --title "Titel" --backtitle "Hintergrundtitel" --help-button --extra-button --extra-label "EXTRA" --ok-label "Zustimmung" --yesno "FRAGETEXT" 0 0
dialog --title "Titel" --backtitle "Hintergrundtitel" --msgbox "Rückgabewert: $?" 0 0
dialog --title "Titel" --backtitle "Hintergrundtitel" --defaultno --yesno "Shellskript beenden?" 0 0
if [ $? -eq 0 ]; then
exit
fi
done
Gleiches gilt analog für die Nein-Schaltfläche (--no-label "Text"), die Ja-Schaltfläche (--yes-label "Text") und die Hilfe (--help-label "Text"). Mit dem vorangestellten --defaultno in der letzten dialog-Anweisung steht die Auswahl nach dem Start auf No.
Bei der Fortschrittsanzeige übermitteln Sie den Prozentwert per Pipe auf das Dialog-Kommando (Listing 8). Das Element eignet sich ebenfalls zur Anzeige von Anteilen an einem Gesamtwert.
Listing 8
#! /bin/sh prozent=0 while [ $prozent -lt 100 ]; do # Erzeugen der Prozent-Angabe prozent=$(echo "$prozent + 10" | bc) # Der Wert für gauge wird über die Pipe an dialog übergeben echo $prozent | dialog --title "Titel" --backtitle "Hintergrundtitel" --gauge "FORTSCHRITTSTEXT" 0 0 # sleep nur für Demo! sleep 1 done
Listing 9 ist “gebrauchsfertig”: Es zeigt die Belegung der Platte durch das Verzeichnis /home an (Abbildung 4). Unübersichtlich gestaltet sich hier das Herauslösen der Werte aus der df-Abfrage. Der Prozentwert erscheint als Balken, der noch freie Speicherplatz im Klartext.
Listing 9
#! /bin/sh
# Prozentuale Belegung aus df -h übergeben
PROZENT=$(df -h | grep "/home" | tr -s ' ' | cut -d' ' -f5 | cut -d% -f1)
FREI=$(df -h | grep "/home" | tr -s ' ' | cut -d' ' -f4)
echo ${PROZENT} | dialog --title "Plattenbelegung von /home " --backtitle "Systemauskunft" --gauge "\n Aktuell freier Plattenplatz: ${FREI}B" 10 50
sleep 5
Formulare
Benötigen Sie nicht nur einfache Formulare, sondern eine komplexe Eingabemaske, so bietet Dialog auch dafür die passenden Elemente. Sie bewegen sich darin mit den Tabulator- und Pfeiltasten. Anfangs erscheint die Syntax unübersichtlich: Es gilt, viel mit Positions- und Größenangaben zu hantieren.
Listing 10 zeigt ein kleines Skript, welches das Editieren von Daten erlaubt und wie diese wieder zurück in Variablen ablegt, um diese dauerhaft zurückzuschreiben. Abbildung 5 zeigt, wie sich welche Positions- und Größenangabe des Befehls in der Maske auswirkt.
Listing 10
#! /bin/sh a="Herr" b="Meier" c="Hans" dialog --title "Titel" --backtitle "Kundendaten" --ok-label "Speichern" --stdout --form "Kartei" 10 60 3 "Anrede " 1 1 "$a" 1 15 30 0 "Name " 2 1 "$b" 2 15 30 0 "Vorname " 3 1 "$c" 3 15 30 0 > ausgabe.txt a=$(cat ausgabe.txt | head -1) b=$(cat ausgabe.txt | head -2 | tail -1) c=$(cat ausgabe.txt | head -3 | tail -1) rm ausgabe.txt dialog --title "Titel" --backtitle "Hintergrundtitel" --msgbox "Gespeicherte Werte: \n $a \n $b \n $c " 0 0
Damit das Umleiten der Ausgabe in eine Datei klappt, setzen Sie vor --form zwingend die zusätzliche Anweisung --stdout ein. In der Nachrichtenbox (msgbox) verwenden Sie das Zeichen für ein Newline (\n), um den Wert jeder Variablen in einer neuen Zeile auszugeben.
Formulare mit der Funktion inputmenu benötigen weniger Größen- und Positionsparameter, jedoch erhalten Sie am Ende nicht die Daten sämtlicher Felder. Je Dialog-Aufruf besteht zudem nur die Möglichkeit, ein einzelnes Feld zu ändern.
Die Ausgabe umfasst die Aktion (RENAMED), den Feldbezeichner und die Daten. Damit die Ausgabe funktioniert, müssen Sie wie zuvor bei --inputmenu die Option --stdout setzen. Das Nachbearbeiten der Daten erfolgt mit cut (Listing 11).
Listing 11
#! /bin/sh neuwert=$(dialog --title "Titel" --backtitle "Hintergrundtitel" --stdout --inputmenu "MENÜÜBERSCHRIFT" 17 60 15 "Zeile-1 >" "Wert 1" "Zeile-2 >" "Wert 2" "Zeile-3 >" "") spalte=$(echo $neuwert | cut -d \> -f 1 | cut -b 9-) eintrag=$(echo $neuwert | cut -d \> -f 2 | cut -b 2-) dialog --title "Titel" --backtitle "Hintergrundtitel" --msgbox "Gespeicherte Werte: \n $neuwert \n $spalte \n $eintrag " 0 0







