Dialog

Aus Ubuntu-Forum Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
 
(Der Versionsvergleich bezieht 7 dazwischenliegende Versionen mit ein.)
Zeile 1: Zeile 1:
-
{{Baustelle}}
+
{| {{Hinweis}}
-
{| {{Warnung}}
+
-
|Dieser Artikel setzt Grundkenntnisse in der Entwicklung von BASH-Scripten voraus  
+
|Dieser Artikel setzt Grundkenntnisse in der Entwicklung von Shell-Scripten voraus  
|}
|}
Zeile 55: Zeile 54:
Die nächste Zeile gibt diese Variable mit einer Messagebox aus, wobei \n jeweils für eine neue Zeile steht.
Die nächste Zeile gibt diese Variable mit einer Messagebox aus, wobei \n jeweils für eine neue Zeile steht.
== Menü ==
== Menü ==
-
Um ein Menü zu erzeugen benutzt man das Argument ''--menu'':
+
Mithilfe von Dialog, kann man auch ein Menü erzeugen aus welchem man über die Pfeiltasten einen Eintrag auswählen kann:
<source lang="bash">
<source lang="bash">
#!/bin/bash
#!/bin/bash
Zeile 66: Zeile 65:
dialog --msgbox "Sie haben $Eingabe gewählt" 0 0
dialog --msgbox "Sie haben $Eingabe gewählt" 0 0
</source>
</source>
 +
Das folgende Beispiel lässt den Benutzer aus einem Menü einen Texteditor wählen. Der Name des Texteditors wird nachher in eine Datei geschrieben, mit ''cat'' eingelesen, in der Variablen ''Eingabe'' gespeichert und mit Hilfe einer ''Messagebox'' angezeigt wird.
 +
 +
Wir wollen uns nun die Syntax von ''dialog --menu'' anschauen. Zunächst folgt auf ''--menu'' ein String, welcher ausgegeben werden soll. Hinter diesem String steht die Höhe der Box, dann folgt die Breite und schließlich die Höhe des Menüs. Erst dann folgen die Menüeinträge, welche aus zwei Parametern bestehen:
 +
*Den ''Namen'' des Eintrags, der sowohl angezeigt, wie auch später mit ''2>'' in eine Datei geschrieben wird
 +
*Eine ''Beschreibung'' des Eintrags, die nur angezeigt wird.
 +
Im Gegensatz zur Beschreibung ist der Name des Eintrags ''kein'' String und darf daher auch nicht in Anführungszeichen gesetzt werden. Zudem müssten eigentlich alle an Dialog zu übergebenden Parameter in einer Zeile stehen und dürften nicht mit einem Umbruch abgebrochen werden. Um den Code jedoch noch lesbar zu halten, kann man der Shell mit einem an das Zeilenende gehängten Backslash mitteilen, dass der Zeilenumbruch nicht zu beachten ist , sondern der Code einfach so ausgeführt werden soll, als stünde er in einer Zeile.
 +
 +
== Liste von Argumenten ==
 +
Dialog besitzt eine sehr gute [[Manpage]], welche die Vielzahl von Argumenten, die Dialog besitzt, kurz erklärt und erläutert. Aufgerufen wird diese Manpage mit dem Befehl
 +
man dialog 
 +
= Links =
 +
* [http://hightek.org/dialog/ Offizielle Internetpräsenz von Dialog]
 +
[[Kategorie:Programmierung]]

Aktuelle Version vom 12. Januar 2011, 14:21 Uhr

Dieser Artikel setzt Grundkenntnisse in der Entwicklung von Shell-Scripten voraus

910.png

Inhaltsverzeichnis

Screenshot einer mit Dialog erzeugten Oberfläche

1 Allgemeines

Dialog ist ein auf ncurses basierendes Programm, welches es ermöglicht in einem Shell-Script auf einfache Art und Weise ein "grafische"-Benutzeroberfläche zu erstellen. Ähnliche Programme sind Dialog sind Zenity oder KDialog, welche aber den Nachteil haben, dass sie einen XServer benötigen.

2 Installation

Dialog ist in den Paketquellen von Ubuntu vorhanden und kann über den Befehl

sudo apt-get install dialog 

installiert werden.

3 Benutzung

3.1 Hello World

Dialog wird mit dem Befehl dialog aufgerufen, danach folgen Argumente, welche beschreiben, wie die Benutzeroberfläche letztendlich aussehen aussehen soll. Dies soll nun an einem einfachen Hello World-Programm demonstriert werden:

dialog --msgbox 'Hello World' 5 20

Mithilfen von --msgbox wird dialog mitgeteilt, dass es eine einfache Nachricht in einem Fenster anzeigen soll. Danach folgt ein String (Zeichenkette), welcher angibt, wie der Inhalt der Nachricht lautet, in diesem Fall ein einfaches Hello World. Die beiden Zahlen hinter dem String geben die Größe des Fensters an (Zuerst folgt die Höhe, danach die Breite).

3.2 Einfache Dialogboxen

Nun haben wir schon einen kleinen Einblick in die Syntax von Dialog bekommen, Dialog kann aber noch viel mehr als einfach Meldungen in Fenstern auszugeben. Im folgenden werden wir lernen, wie man über Dialog eine Interaktion mit dem Benutzer erreichen kann. Dazu werden werden wir ein kleines Bash-Script schreiben, dass den Benutzer fragt, ob es ihm gut geht:

#!/bin/bash
dialog --backtitle "Interagierendes Dialogprogram" --yesno "Geht es dir gut?" 0 0
if [ $? -eq 0 ]; then
   dialog --msgbox "Das freut mich!" 0 0
else
  dialog --msgbox "Das tut mir aber leid!" 0 0
fi

Dieses Programm fragt den Benutzer, ob es ihm gut geht, und teilt dem Benutzer je nach antwort entweder mit, dass es sich freue, oder, dass es ihm leid tue. Wie man sieht, tauchen hier einige neue Funktionen von Dialog auf, welche wir näher betrachten wollen:

dialog --backtitle "Interagierendes Dialogprogram" --yesno "Geht es dir gut?" 0 0

In dieser Zeile fällt als erstes das Argument --backtitle auf, welches die Funktion hat, den nachfolgenden String als Überschrift über dem Fenster anzuzeigen. Dazu passend, existiert es auch das Argument --title, welches eine Überschrift in das Fenster zeichnet.

Auf dieses Argument hin folgt der Parameter --yesno (Yes/No). Dieser Parameter hat die Funktion eine Dialogbox anzuzeigen, welche zwei Button hat, einen Ja und einen Nein Button. Wie bei der --msgbox gibt es auch hier einen String, der den auszugebenden Text anzeigt und zwei Integer (Ganzzahlen), welche die Höhe und die Breite der Dialogbox angeben. Einem aufmerksamen Leser sollte nun aufgefallen seien, das sowohl Höhe als auch Breite der Box auf 0 steht. Das hat die Folge, das die Größe der Box sich automatisch an die Länge des Textes anpasst.

Nun stellt sich natürlich die Frage auf, wie man nun letztendlich herausfindet, welcher der Button schließlich gedrückt wurde? Dazu benutzt man die Umgebungsvariable, $?, in welcher der Wert gespeichert ist, der vom letzten Befehl mit exit zurückgegeben wurde. In diesem Fall wäre das 0 für Ja und 1 für Nein. Diesen Wert kann man nun mit einer normalen IF-Anweisung auswerten.

3.3 Benutzereingaben

Müssen komplexe Benutzereingaben ausgewertet werden, kann man jedoch mit $? nichts anfangen. Stattdessen muss man die Eingabe zunächst in eine Datei geschrieben werden:

#!/bin/bash
dialog --inputbox 'Geben Sie etwas ein!' 0 0 2> dialog.tmp
Eingabe=`cat dialog.tmp`
dialog --msgbox "Du hast eingegeben: \n \n $Eingabe" 0 0

In diesem Beispiel wird zunächst mit

dialog --inputbox 'Geben Sie etwas ein!' 0 0 

Ein einfaches Feld für die Texteingabe erzeugt. Mit

[..] 2> dialog.tmp

wird die Eingabe in eine Datei namens dialog.tmp geschrieben, deren Inhalt später mit

Eingabe=`cat dialog.tmp`

cat eingelesen und in der Variable Eingabe gespeichert wird.

dialog --msgbox "Du hast eingegeben: \n \n $Eingabe" 0 0

Die nächste Zeile gibt diese Variable mit einer Messagebox aus, wobei \n jeweils für eine neue Zeile steht.

3.4 Menü

Mithilfe von Dialog, kann man auch ein Menü erzeugen aus welchem man über die Pfeiltasten einen Eintrag auswählen kann:

#!/bin/bash
dialog --menu "Wähle einen Texteditor" 15 60 10\
 Emacs "Ein sehr mächtiger Texteditor"\
 vi "Ein sehr mächtiger Texteditor für das Terminal"\
 Gedit "Standard-Editor von Gnome"\
 Kile "Standard-Editor von KDE" 2>dialog.tmp
Eingabe=`cat dialog.tmp`
dialog --msgbox "Sie haben $Eingabe gewählt" 0 0

Das folgende Beispiel lässt den Benutzer aus einem Menü einen Texteditor wählen. Der Name des Texteditors wird nachher in eine Datei geschrieben, mit cat eingelesen, in der Variablen Eingabe gespeichert und mit Hilfe einer Messagebox angezeigt wird.

Wir wollen uns nun die Syntax von dialog --menu anschauen. Zunächst folgt auf --menu ein String, welcher ausgegeben werden soll. Hinter diesem String steht die Höhe der Box, dann folgt die Breite und schließlich die Höhe des Menüs. Erst dann folgen die Menüeinträge, welche aus zwei Parametern bestehen:

Im Gegensatz zur Beschreibung ist der Name des Eintrags kein String und darf daher auch nicht in Anführungszeichen gesetzt werden. Zudem müssten eigentlich alle an Dialog zu übergebenden Parameter in einer Zeile stehen und dürften nicht mit einem Umbruch abgebrochen werden. Um den Code jedoch noch lesbar zu halten, kann man der Shell mit einem an das Zeilenende gehängten Backslash mitteilen, dass der Zeilenumbruch nicht zu beachten ist , sondern der Code einfach so ausgeführt werden soll, als stünde er in einer Zeile.

3.5 Liste von Argumenten

Dialog besitzt eine sehr gute Manpage, welche die Vielzahl von Argumenten, die Dialog besitzt, kurz erklärt und erläutert. Aufgerufen wird diese Manpage mit dem Befehl

man dialog  

4 Links

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Forum
Navigation
Internes
Bearbeitungshilfen
Werkzeuge