GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Benutzeroberflächen mit Dialog. Bash-Skripting (IV)

Dies ist der letzte Artikel einer Serie, die sich auf Gnu Bash-Skripting konzentriert. Im ersten Artikel haben wir gerade ein einfaches Skript mit Befehlen nacheinander erstellt. Wir haben auch die Verwendung einiger Variablen gesehen.
Der zweite Artikel behandelte einige Bash-Kontrollstrukturen. Der dritte behandelte Umleitungen, Pipes und Befehlsersetzungen.
In diesem letzten (vorerst) werde ich zeigen, wie man Benutzeroberflächen mit Dialogen in unseren Skripten erstellt.

Installationsdialog

Die Quelle kann hier zum Kompilieren heruntergeladen werden:https://invisible-island.net/dialog/. Um vorkompilierte Binärdateien zu installieren, hat Ihre Distribution sicherlich ein Paket namens „dialog“, das Sie mit den Paket-Tools installieren können.

Allgemeine Optionen

Die folgenden Optionen gelten für jedes Widget, das wir im Dialog verwenden können. Die hier aufgeführten sind nicht alle, aber die, die ich am häufigsten verwende.

  • --ascii-lines Anstatt Grafiklinien um Kästchen zu ziehen, „+“ und „-“ an derselben Stelle.
  • --title Titel Gibt eine Titelzeichenfolge an, die oben im Dialogfeld angezeigt werden soll.
  • --default-button string Legen Sie die vorausgewählte Schaltfläche in einem Widget fest. Normalerweise ist die erste Schaltfläche in jedem Widget die Standardeinstellung.
  • --default-item String Legen Sie das Standardelement in einer Checkliste, einem Formular oder einem Menüfeld fest.
  • --no-lines Anstatt Linien um Kästchen zu ziehen, zeichnen Sie Leerzeichen an derselben Stelle.
  • --no-shadow Schatten unterdrücken, die rechts und unten in jedem Dialogfeld gezeichnet würden
  • --backtitle backtitle Gibt eine Backtitle-Zeichenfolge an, die oben auf dem Bildschirm angezeigt werden soll.
  • --stdout Direkte Ausgabe auf die Standardausgabe. Nützlich, um die Benutzerauswahl oder -antwort in einer Variablen zu speichern

Zum Beispiel:

dialog --backtitle 'this is backtitle' --title 'Title' --infobox "This is just an infobox with some options settled" 0 0

würde diese Ausgabe erzeugen:

Weitere Beispiele:

Mein Vorschlag für Skripte mit mehreren Bildschirmen ist, einen Alias ​​mit einigen allgemeinen Optionen hinzuzufügen, damit Sie nicht jedes Mal tippen (oder kopieren) müssen, wie hier:

alias dialog="dialog --backtitle 'this is backtitle' --title 'Title' --stdout"
dialog --infobox "This is just an infobox" 0 0

Einige Widgets

Infobox

Es ist das Beispiel von oben. Die Syntax lautet:

--infobox text height width

Dabei ist Text der anzuzeigende Text und Höhe und Breite die Größe des Dialogfelds. Sie können die Ausgabe eines Befehls für Text mit Befehlssubstitution verwenden, z. B. --infobox "$(cat somefile.txt)" . Die Größe wird in Zeichen ausgedrückt, ein Wert von 0 bedeutet automatisch.

ja nein

Typisches Feld im Abfragestil mit den Antwortschaltflächen „Ja“ und „Nein“. Die Syntax lautet:

--yesno text height width

Wir können es in einem if-then-else-Block mit Code wie diesem verwenden:

if dialog --yesno "continue?" 0 0
then
	echo "You choose to continue"
	some_command
	some_other_command
else 
	echo "no"
fi

Eine scrollende Auswahlliste mit Einzeleintragsauswahl. Die Syntax lautet:

--menu text height width menu-height tagX itemX tagY itemY

Jeder Menüeintrag besteht aus einer Tag-Zeichenfolge und einer Elementzeichenfolge. Ich finde es großartig, es mit einem case-esac-Block zu kombinieren, wie im nächsten Beispiel:

case $(dialog --menu "A menu of choices " 0 0 0 a item\ 1 b item\ 2 c item\ 3 d item\ 4) 
in 
	a) 
		echo "Item A" 
		some commands
		;; 
	b)
		echo "Item B" 
		some other commands
		;; 
	*) 
		echo other
		;; 
esac

Eingabefeld

Ein Eingabefeld ist nützlich, wenn Sie Fragen stellen möchten, bei denen der Benutzer eine Zeichenfolge als Antwort eingeben muss. Die Syntax lautet:

--inputbox text height width [init]

init ist optional und kann verwendet werden, um eine Standardantwort festzulegen.

Checkliste

Eine Checklistenbox ähnelt einer Menübox:Es gibt mehrere Einträge, die in Form eines Menüs präsentiert werden. Aber anstatt nur einen Eintrag auszuwählen, kann jeder Eintrag ein- oder ausgeschaltet werden. Die Syntax lautet:

--checklist text height width list-height tag item status

Der Status kann ein oder aus sein. Wir können mit den ausgewählten Optionen mit einer for-Schleife und einem case-Block arbeiten, um die ausgewählten Optionen auszuwerten. Beispiel:

for i in $(dialog --checklist "A menu of choices " 0 0 0 a item\ 1 off b item\ 2 off c item\ 3 off )
do 
	case $i in
		a)
			echo "item 1 selected"
			;;
		b)
			echo "item 2 selected"
			;;
		c)
			echo "item 3 selected"
			;;
	esac
done

Eine Alternative ist die Radioliste, bei der der Benutzer nur ein Element auswählen kann.

Messgerät

Ein typischer Fortschrittsbalken. Das Messgerät zeigt den Prozentsatz an. Neue Prozentsätze werden von der Standardeingabe gelesen, eine ganze Zahl pro Zeile. Die Syntax lautet:

--gauge text height width [percent]

Prozent ist optional und stellt den anfänglichen Prozentsatz dar, der erledigt wurde. Dies kann mit Rohren verwendet werden. Zum Beispiel:

seq 1 100|dialog --gauge "A gauge" 0 0

Kalender

Ein Kalenderfeld zeigt Monat, Tag und Jahr an. Die Syntax lautet:

--calendar text height width day month year

Wenn die Werte für Tag, Monat oder Jahr fehlen oder negativ sind, wird das aktuelle Datum verwendet.

Weitere Informationen

Ich habe gerade einige der verfügbaren Widgets gezeigt (es gibt mehr als zwanzig). Die Dialog-Manpage bietet Hilfe für alle.

Natürlich ist der Dialog nicht das einzige verfügbare Werkzeug, um Text-Benutzeroberflächen zu erstellen. Es gibt Alternativen wie Xdialog, Whiptail (beide auf der Dialog-Manpage erwähnt) oder Zenity. Denken Sie daran, dass es mehr als eine Möglichkeit gibt.

Diese Serie aus vier Artikeln über Bash-Scripting ist noch weit, weit, weit davon entfernt, vollständig zu sein. Meine Absicht ist es, Sie neugierig genug zu machen, um selbst nachzuforschen. Halten Sie die Bash-Manpage bereit (das kann manchmal verwirrend sein, zumindest für mich). Und halten Sie den Advanced Bash Scripting Guide für einen umfassenderen Leitfaden voller Beispiele in Ihrer Nähe.


Linux
  1. Bash-Scripting(I)

  2. Bash -c mit Positionsparametern?

  3. Alias ​​mit Variable in Bash

  4. Wie schreibe ich eine mehrzeilige Zeichenfolge mit Bash mit Variablen?

  5. Erstellen Sie ein Array mit allen Netzwerkschnittstellen in Bash

Bash-Scripting – Assoziatives Array mit Beispielen erklärt

Bash-Scripting – Indiziertes Array mit Beispielen erklärt

Bash-Skripting – Case-Statement

Bash-Skripting (II)

Ersetzen einer Teilzeichenfolge durch eine andere Zeichenfolge in Bash

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen