So fügen Sie Linux-Shell-Skripts eine GUI hinzu
Veröffentlicht: 2022-01-29 Sie können GUI-Fenster, Schieberegler, Optionsfelder, Fortschrittsbalken und mehr in Ihren Bash-Skripten verwenden. Erfahren Sie, wie Sie das zenity
Toolkit verwenden und Ihren Bash-Skripten ein neues Gesicht geben. Wir zeigen Ihnen wie.
Bash-Skripting ist eine leistungsstarke Programmiersprache, und da es in die Bash-Shell integriert ist, ist es für jeden leicht verfügbar. Es ist eine einfache Sprache, um mit dem Programmieren zu beginnen. Da sie interpretiert wird, müssen Sie Ihre Skripte nicht kompilieren. Sobald Sie die Skriptdatei bearbeitet und ausführbar gemacht haben, können Sie sie ausführen. Dies macht den Codierungs-, Ausführungs- und Debugging-Zyklus sehr effizient.
Es gibt zwei Hauptbeschwerden bei Bash-Skripten, und die erste ist die Geschwindigkeit. Da die Bash-Shell die Befehle im Skript interpretiert, werden sie nicht so schnell ausgeführt wie kompilierter Code. Das ist jedoch so, als würde man sich darüber beschweren, dass ein Traktor nicht so schnell ist wie ein Auto; Sie sind für verschiedene Dinge gedacht.
Es gibt jedoch zwei Arten von Geschwindigkeit. Sie können oft ein schnelles Skript zusammenstellen und es verwenden, um eine Aufgabe viel schneller auszuführen, als eine Lösung in einer kompilierten Sprache wie C zu entwickeln.
Die zweite Beschwerde, die Leute mit Bash-Skripten haben, ist die Benutzeroberfläche – es ist ein Terminalfenster. Natürlich spielt die Schnittstelle manchmal keine Rolle. Wenn die einzige Person, die das Skript jemals verwendet, sein Autor ist, ist die Benutzeroberfläche wahrscheinlich nicht so wichtig. Es spielt auch keine Rolle für Skripte, die eine Hintergrund- und Stapelverarbeitung durchführen. Typischerweise benötigen solche Skripte nicht viel (wenn überhaupt) Benutzerinteraktion.
Es gibt Fälle, in denen Sie etwas intuitiveres und moderneres als das Terminalfenster benötigen. Die meisten Menschen sind mit einer grafischen Benutzeroberfläche (GUI) vertraut. Um den Menschen ein möglichst reibungsloses Erlebnis zu bieten, müssen Sie GUI-Elemente aus Ihren Skripten erstellen und verwenden.
Die zenity-Anwendung
zenity
können Sie eine Vielzahl von grafischen Oberflächenelementen in Ihre Bash-Skripte integrieren. Es ist ein leistungsstarkes Toolkit, das Ihren Skripten ein modernes Aussehen und ein zeitgemäßes, vertrautes Erscheinungsbild verleiht.
zenity
ist auf Ubuntu-, Fedora- und Manjaro-Distributionen vorinstalliert. Es ist Teil von GNOME. Wenn Sie KDE verwenden, sollten Sie stattdessen kdialog
, obwohl zenity
auf jeder Desktop-Umgebung läuft.
Die Beispiele in diesem Artikel zeigen Ihnen, wie Sie die verschiedenen Dialogfenster über die Befehlszeile erstellen, wie Sie ihre Rückgabewerte und Benutzerauswahlen in Variablen erfassen und wie Sie die Dialogfenster in Skripten verwenden.
Wir schließen mit einer kleinen Anwendung ab, die alle drei Arten von Dialogfenstern verwendet.
Das Kalender-Dialogfenster
Ein Kalender-Dialogfenster ermöglicht es jemandem, ein Datum auszuwählen. Um einen mit zenity
zu erstellen, ist ein einziger Befehl aus zwei Wörtern erforderlich:
zenity --Kalender
Das Kalender-Dialogfenster erscheint. Dies hat alle Funktionen, die Sie von einer Standard-Datumsauswahl erwarten würden. Sie können den Monat und das Jahr ändern und auf einen Tag klicken, um dieses Datum auszuwählen. Standardmäßig wird das heutige Datum hervorgehoben, wenn das Fenster angezeigt wird.
Klicken Sie auf „OK“, um das Dialogfenster zu schließen und das markierte Datum auszuwählen. Ein Doppelklick auf ein Datum bewirkt dasselbe.
Wenn Sie keine Datumsauswahl treffen möchten, klicken Sie auf „Abbrechen“, drücken Sie die „Esc“-Taste auf Ihrer Tastatur oder schließen Sie das Dialogfenster.
Im obigen Beispiel ist der 19. August 2019 ausgewählt. Wenn der Benutzer auf „OK“ klickt, schließt sich der Kalender und das ausgewählte Datum wird im Terminalfenster gedruckt.
Sie können die Zeile „GTKDialog mapped without an transient parent. Davon wird abgeraten.“
GTK steht für GIMP Tool Kit, das Toolkit, das zur Entwicklung der GNOME-Schnittstelle verwendet wird. Es wurde ursprünglich von den Autoren des GNU Image Manipulation Program (GIMP) entwickelt. GNU steht für GNU's Not Unix.
Die GTK-Engine warnt die Autoren von zenity
, dass sie eine GTK-Komponente auf nicht standardmäßige Weise verwendet haben.
Erfassen des Datumswertes
Das Drucken des Datums auf dem Terminal bringt uns nicht viel. Wenn wir diesen Kalender von einem unserer Skripte aus aufrufen, müssen wir den ausgewählten Datumswert erfassen, damit wir etwas Nützliches damit in unserem Skript machen können. Wir werden auch den Kalender leicht anpassen.
Wir verwenden die folgenden Optionen mit dem Kalender. Sie müssen alle mit dem Doppelstrich-Flag „–“ verwendet werden:
- –text : Gibt eine Textzeichenfolge an, die im Kalender angezeigt werden soll. Es ersetzt die Standardeinstellung „Datum unten auswählen“.
- –title : Legt den Titel des Kalenderdialogfensters fest.
- –day : Legt den Tag fest, der ausgewählt ist, wenn der Kalender geöffnet wird.
- –Monat : Legt den Monat fest, der ausgewählt ist, wenn der Kalender geöffnet wird.
- –year : Legt das ausgewählte Jahr fest, wenn der Kalender geöffnet wird.
Wir verwenden eine Variable namens ChosenDate
, um das vom Kalender zurückgegebene Datum zu erfassen. Und wir verwenden echo $ChosenDate
, um dieses Datum im Terminalfenster auszugeben.
Ja, wir haben im vorherigen Beispiel dasselbe Ergebnis erzielt, aber hier haben wir das ausgewählte Datum in einer Variablen gespeichert. Im vorherigen Beispiel wurde es gedruckt und vergessen.
ChosenDate=$(zenity -- Calendar --text "Choose a date" --title "How-To Geek Rota" --day 1 -- month 9 --year 2019); Echo $ChosenDate
Jetzt zeigt der Kalender unsere Eingabeaufforderung und unseren Fenstertitel an. Das Datum wird auf das von uns gewählte Startdatum und nicht auf das heutige Datum gesetzt.
Wir können auch das Format der Datumszeichenfolge anpassen, die zurückgegeben wird, wenn eine Auswahl getroffen wird. Auf die Option --date-format
muss ein Formatbezeichner folgen. Dies ist eine Zeichenfolge von Tokens, die die Daten und Formate definieren, die in die Ausgabe eingeschlossen werden sollen. Die Token sind dieselben wie die, die mit der C-Sprachfunktion strftime()
verwendet werden, und es gibt eine riesige Auswahl davon.
Die von uns verwendeten Token sind:
- %A : Der vollständige Name des Wochentags.
- %d : Der Tag des Monats als Ziffer.
- %m : Der Monat als Ziffer.
- %y : Das Jahr als zwei Ziffern (kein Jahrhundert).
ChosenDate=$(zenity -- Calendar --text "Choose a date" --title "How-To Geek Rota" --date-format="%A %d/%m/%y" --day 1 -- Monat 9 - Jahr 2019); Echo $ChosenDate
Jemand wählt ein Datum aus:
Und das Datum wird mit unserem Format zurückgegeben. Es zeigt den Namen des Wochentags, gefolgt vom Datum in europäischer Reihenfolge: Tag, Monat, Jahr.
Das Dialogfenster Dateiauswahl: Eine Datei auswählen
Dialogfenster zur Dateiauswahl sind recht komplex. Benutzer können das Dateisystem durchsuchen, eine oder mehrere Dateien markieren und dann auf „OK“ klicken, um diese Dateien auszuwählen oder die Auswahl insgesamt abzubrechen.
zenity
bietet all diese Funktionen und mehr. Und es ist genauso einfach zu bedienen wie das Kalender-Dialogfenster.
Die neuen Optionen, die wir verwenden werden, sind:
- –file-selection :
zenity
mit, dass wir ein Dialogfenster zur Dateiauswahl verwenden möchten. - –multiple : Ermöglicht jemandem, mehr als eine Datei auszuwählen.
- –file-filter : Teilt dem Dateidialogfenster mit, welche Dateitypen angezeigt werden sollen.
zenity --file-selection --tile "How-To Geek" --multiple --file-filter='*.mm *.png *.page *.sh *.txt'
Das Dateiauswahl-Dialogfenster ist genauso funktional wie jedes andere Dateiauswahlfenster.
Der Benutzer kann das Dateisystem durchsuchen und die Datei seiner Wahl auswählen.
Wir haben ein neues Verzeichnis aufgerufen und eine Datei mit dem Namen „button_hybrid.png“ ausgewählt.
Wenn Sie auf „OK“ klicken, wird das Dialogfenster zur Dateiauswahl geschlossen und der Dateiname und Pfad werden im Terminalfenster gedruckt.
Wenn Sie den Dateinamen in einer weiteren Verarbeitung verwenden müssen, können Sie ihn in einer Variablen erfassen, genau wie Sie es für das Datum aus dem Kalender getan haben.
Das Dialogfenster Dateiauswahl: Speichern einer Datei
Wenn wir eine Option hinzufügen, können wir das Dialogfenster zur Dateiauswahl in ein Dialogfenster zum Speichern von Dateien verwandeln. Die Option ist --save
. Wir werden auch die Option --confirm-overwrite
verwenden. Dies fordert die Person auf, zu bestätigen, dass sie eine vorhandene Datei überschreiben möchte.
Response=$(zenity --file-selection --save --confirm-overwrite); echo $Response
Das Dialogfenster Datei speichern erscheint. Beachten Sie, dass es ein Textfeld gibt, in das jemand einen Dateinamen eingeben kann.
Der Benutzer kann innerhalb des Dateisystems zum Speicherort seiner Wahl navigieren, einen Namen für die Datei angeben oder auf eine vorhandene Datei klicken, um sie zu überschreiben.
Im obigen Beispiel hat der Benutzer eine vorhandene Datei markiert.
Wenn er auf „OK“ klickt, erscheint ein Bestätigungsdialogfenster, in dem er aufgefordert wird, zu bestätigen, dass er die vorhandene Datei ersetzen möchte. Beachten Sie, dass der Name der Datei im Warndialog angezeigt wird. Das ist die Liebe zum Detail, die zenity
sein professionelles Aussehen verleiht.
Wenn wir die Option --confirm-overwrite
nicht verwendet hätten, wäre die Datei stillschweigend überschrieben worden.
Der Name der Datei wird in der Variablen Response
gespeichert, die im Terminalfenster ausgegeben wird.
Benachrichtigungsdialogfenster
Mit zenity
ist das Einfügen von eleganten Benachrichtigungsdialogfenstern in Ihre Skripte mühelos. Es gibt Standarddialogfenster, die Sie aufrufen können, um Informationen, Warnungen, Fehlermeldungen und Fragen für den Benutzer bereitzustellen.
Verwenden Sie den folgenden Befehl, um ein Dialogfeld mit einer Fehlermeldung zu erstellen:
zenity --error --width 300 --text "Berechtigung verweigert. Kann nicht in die Datei schreiben."
Die neuen Optionen, die wir verwenden, sind:
- –error :
zenity
, dass wir ein Fehlerdialogfenster verwenden möchten. - –width : Legt die Anfangsbreite des Fensters fest.
Das Fehlerdialogfenster erscheint in der angegebenen Breite. Es verwendet das Standard-GTK-Fehlersymbol.
Um ein Informationsdialogfenster zu erstellen, verwenden Sie den folgenden Befehl:
zenity --info --width 300 --text "Aktualisierung abgeschlossen. Klicken Sie auf OK, um fortzufahren."
Die neue Option, die wir verwenden, ist --info
, die zenity
, ein Informationsdialogfenster zu erstellen.
Verwenden Sie den folgenden Befehl, um ein Fragedialogfenster zu erstellen:
zenity --question --width 300 --text "Möchten Sie fortfahren?"; Echo $?
Die neue Option, die wir verwenden, ist --question
, die Zenity anweist, ein zenity
zu erstellen.
Das $?
ist ein spezieller Parameter. Es enthält den Rückgabewert der zuletzt ausgeführten Vordergrundpipeline. Im Allgemeinen ist dies der Wert des zuletzt abgeschlossenen Prozesses. Ein Nullwert bedeutet „OK“ und ein Wert von eins oder mehr bedeutet „Abbrechen“.
Dies ist eine allgemeine Technik, die Sie auf jedes der zenity
Dialogfenster anwenden können. Indem Sie diesen Wert in Ihrem Skript überprüfen, können Sie bestimmen, ob die von einem Dialogfenster zurückgegebenen Daten verarbeitet oder ignoriert werden sollen.
Wir haben auf „Ja“ geklickt, also ist der Rückgabecode eine Null, die „OK“ anzeigt.
Verwenden Sie den folgenden Befehl, um ein Warndialogfenster zu erstellen:
zenity --warning --title "Low Hard Drive Space" --width 300 --text "Möglicherweise ist nicht genügend Festplattenspeicher vorhanden, um das Backup zu speichern."
Die neue Option, die wir verwenden, ist --warning
, die Zenity anweist, ein zenity
zu erstellen.
Das Warndialogfenster erscheint. Es ist keine Frage, also hat es nur eine Taste.
Das Fortschrittsdialogfenster
Sie können das zenity
Fortschrittsdialogfenster verwenden, um einen Fortschrittsbalken anzuzeigen, der anzeigt, wie kurz vor der Fertigstellung Ihres Skripts steht.
Der Fortschrittsbalken wird entsprechend den Werten vorgerückt, die von Ihrem Skript in ihn geleitet werden. Um das Prinzip zu demonstrieren, verwenden Sie den folgenden Befehl:
(for i in $(seq 0 10 100); do echo $i; sleep 1; done)
Der Befehl gliedert sich wie folgt:
- Der Befehl
seq
durchläuft eine Sequenz von 0 bis 100 in Zehnerschritten. - Bei jedem Schritt wird der Wert in der Variablen
i
gespeichert. Dies wird im Terminalfenster gedruckt. - Der Befehl wird aufgrund des Befehls
sleep 1
für eine Sekunde angehalten.
Wir können dies mit dem zenity
Fortschrittsdialogfenster verwenden, um den Fortschrittsbalken zu demonstrieren. Beachten Sie, dass wir die Ausgabe des vorherigen Befehls an zenity:
(for i in $(seq 0 10 100); do echo $i; sleep 1; done) | zenity --progress --title "How-To Geek" -- automatisches Schließen
Die neuen Optionen, die wir verwenden, sind:
- –progress :
zenity
, dass wir ein Fortschrittsdialogfenster verwenden möchten. - –auto-close : Schließt den Dialog, wenn der Fortschrittsbalken 100 Prozent erreicht.
Das Fortschrittsdialogfenster wird angezeigt, und der Balken bewegt sich in Richtung 100 Prozent, wobei zwischen jedem Schritt eine Sekunde Pause eingelegt wird.
Wir können dieses Konzept der Weiterleitung von Werten an zenity
, um das Fortschrittsdialogfenster in ein Skript aufzunehmen.
Geben Sie diesen Text in einen Editor ein und speichern Sie ihn als „progress.sh“.
!/bin/bash Funktion Arbeitsliste () { echo "# Erstes Arbeitselement" echo "25" schlafen 1 echo "# Zweites Arbeitselement" echo "50" schlafen 1 echo "# Drittes Arbeitselement" echo "75" schlafen 1 echo "# Letztes Arbeitselement" echo "100" schlafen 1 } Arbeitsliste | zenity --progress --title "How-To-Geek" --auto-close Ausgang 0
Hier ist eine Aufschlüsselung des Skripts:
- Das Skript definiert eine Funktion namens
work-list
. Hier geben Sie Ihre Befehle und Anweisungen ein, um echte Arbeit zu leisten. Ersetzen Sie jeden dersleep 1
-Befehle durch Ihre echten. -
zenity
akzeptiert dieecho "# ..."
und zeigt sie im Fortschrittsdialogfenster an. Ändern Sie den Text dieser Zeilen, damit sie informative Nachrichten an den Benutzer weitergeben. - Die
echo
, die Zahlen enthalten, wie z. B.echo "25"
, werden auch vonzenity
akzeptiert und setzen den Wert des Fortschrittsbalkens. - Die Work-List-Funktion wird aufgerufen und in
zenity
.
Verwenden Sie diesen Befehl, um das Skript ausführbar zu machen:
chmod +x fortschritt.sh
Verwenden Sie diesen Befehl, um das Skript auszuführen:
./fortschritt.sh
Das Skript wird ausgeführt, und die Textnachricht ändert sich, während jede Phase des Skripts ausgeführt wird. Der Fortschrittsbalken bewegt sich schrittweise auf 100 Prozent zu.
Das Dialogfenster „Skalieren“.
Das Dialogfeld „Skalieren“ ermöglicht es jemandem, einen Schieberegler zu bewegen, um einen numerischen Wert auszuwählen. Das bedeutet, dass sie keinen zu hohen oder zu niedrigen Wert eingeben kann.
Die neuen Optionen, die wir verwenden, sind:
- –scale :
zenity
, dass wir ein Skalierungsdialogfenster verwenden möchten. - –min-value : Legt den Mindestwert für die Skala fest.
- –max-value : Legt den Maximalwert für die Skala fest.
- –step : Legt den Betrag fest, um den sich der Schieberegler bewegt, wenn die Pfeiltasten verwendet werden. Dies wirkt sich nicht auf die Schiebereglerbewegungen aus, wenn jemand die Maus verwendet.
- –value : Legt den Anfangswert und die Position des Schiebereglers fest.
Dies ist der Befehl, den wir verwenden:
Response=$(zenity --scale --title "How-To Geek" --text "Vergrößerung wählen." --min-value=0 --max-value=30 --step=3 --value15); echo $Response
Das Schieberegler-Dialogfenster wird mit dem Schieberegler auf 15 eingestellt angezeigt.
Der Benutzer kann den Schieberegler bewegen, um einen neuen Wert auszuwählen.
Wenn sie auf „OK“ klickt, wird der Wert in die Variable Response
übertragen und im Terminalfenster ausgegeben.
Das Eingabedialogfenster
Das Eingabedialogfenster ermöglicht es jemandem, Text einzugeben.
Die neuen Optionen, die wir verwenden, sind:
- –entry : Teilt Zenity mit, dass wir ein
zenity
verwenden möchten. - –entry-text : Sie können dies verwenden, wenn Sie einen vorgeschlagenen Wert in das Texteingabefeld eingeben möchten. Wir verwenden „“, um ein leeres Feld zu erzwingen. Dies ist nicht unbedingt erforderlich, aber wir wollten die Option dokumentieren.
Der vollständige Befehl sieht folgendermaßen aus:
Response=$(zenity --entry --text "Geben Sie Ihren Suchbegriff ein" --title "Howe-To Geek" --entry-text=""); echo $Response
Es erscheint ein einfaches Dialogfenster, das ein Texteingabefeld enthält.
Jemand kann Text eingeben und bearbeiten.
Wenn er auf „OK“ klickt, wird der von ihm eingegebene Wert der Variablen Response zugewiesen. Wir verwenden echo, um den Wert der Variablen im Terminalfenster auszugeben.
Alles zusammenfügen
Lassen Sie uns diese Techniken zusammenfügen und ein funktionales Skript erstellen. Das Skript führt einen Hardware-Info-Scan durch und präsentiert dem Benutzer die Ergebnisse in einem Lauftextfenster. Sie kann einen langen oder kurzen Scantyp wählen.
Für dieses Skript verwenden wir drei Arten von Dialogfenstern, von denen zwei neu für uns sind:
- Das erste ist ein Listendialogfenster. Es erlaubt jemandem, eine Wahl zu treffen.
- Das zweite ist ein Fortschrittsdialogfenster, das den Benutzer darüber informiert, dass etwas passiert und er warten sollte.
- Das dritte ist ein Textinformationsfenster, das dem Benutzer die Ergebnisse anzeigt.
Geben Sie diesen Text in einen Editor ein und speichern Sie ihn als „hardware-info.sh“.
#!/bin/bash # Hardwareliste für diesen Computer anzeigen TempFile=$(mktemp) ListType=`zenity --width=400 --height=275 --list --radiolist \ --title 'Hardware-Scan' \ --text 'Wählen Sie den Scan-Typ:' \ --Spalte 'Auswählen' \ --column 'Scan Type' TRUE "Short" FALSE "Long"` wenn [[ $? -eq 1 ]]; dann # Sie haben Abbrechen gedrückt oder das Dialogfenster geschlossen zenity --error --title="Scan abgelehnt" --width=200 \ --text="Hardware-Scan übersprungen" Ausgang 1 elif [ $ListType == "Kurz" ]; dann # sie haben das kurze Optionsfeld ausgewählt Flag="--kurz" anders # Sie haben das lange Optionsfeld ausgewählt Flagge="" fi # Suchen Sie nach Hardwareinformationen mit dem entsprechenden Wert in $Flag hwinfo $Flag | tee >(zenity --width=200 --height=100 \ --title="Zusammentragen von Informationen" --progress \ --pulsate --text="Überprüfe Hardware..." \ --auto-kill --auto-close) >${TempFile} # Zeigen Sie die Hardwareinformationen in einem scrollenden Fenster an zenity --width=800 --height=600 \ --title "Hardwaredetails" \ --text-info --filename="${TempFile}" Ausgang 0
Verwenden Sie diesen Befehl, um es ausführbar zu machen:
chmod +x hardware-info.sh
Dieses Skript erstellt eine temporäre Datei, und der Name der Datei wird in der Variablen TempFile gespeichert:
TempFile=$(mktemp)
Das Skript verwendet die Option --list
, um ein Zenity-Dialogfenster zu erstellen, das als zenity
bezeichnet wird. Die „\“-Zeichen am Ende der Zeilen weisen das Skript an, sie als eine lange Zeile zu behandeln, die umbrochen wird. Hier ist der Prozess:
- Wir geben eine Breite und Höhe für das Fenster an.
- Das Listendialogfenster unterstützt Spalten. Die Option
--radiolist
bewirkt, dass die erste Spalte eine Spalte mit Optionsfeldern ist. - Wir legen einen Titel und eine Textaufforderung für das Fenster fest.
- Wir setzen den Titel der ersten Spalte auf „Auswählen“. Der Inhalt dieser Spalte sind die Optionsfelder.
- Wir setzen den Titel der zweiten Spalte auf „Auswählen“ und stellen den Inhalt der zweiten Spalte bereit. Diese Spalte enthält zwei Textbeschriftungen: „Kurz“ und „Lang“. Die Indikatoren TRUE und FALSE bedeuten, dass die Option „Kurz“ standardmäßig ausgewählt ist, wenn das Dialogfenster erscheint.
- Wir speichern das Ergebnis dieses Dialogfensters in einer Variablen namens
ListType
.
ListType=`zenity --width=400 --height=275 --list --radiolist \ --title 'Hardware-Scan' \ --text 'Wählen Sie den Scan-Typ:' \ --Spalte 'Auswählen' \ --column 'Scan Type' TRUE "Short" FALSE "Long"`
Wenn der Benutzer „Abbrechen“ drückt, brauchen wir den Wert in ListType,
wir können einfach abbrechen. Wenn er „OK“ drückt, müssen wir herausfinden, ob er das Optionsfeld „Kurz“ oder „Lang“ ausgewählt hat:
- Der spezielle Parameter
$?
ist gleich Null, wenn der Benutzer „OK“ gedrückt hat. Es entspricht eins, wenn er „Abbrechen“ gedrückt oder das Fenster geschlossen hat. - Wenn es gleich eins ist, zeigt das Skript ein Dialogfenster mit Fehlerinformationen an und wird beendet. Wenn er „OK“ drückt, fahren wir fort, um den Wert in der Variablen „
ListType
“ zu testen. - Wenn die Variable „
ListType
“ den Wert „Short“ enthält, setzt das Skript eine Variable namens „Flag
“ auf „–short“. - Wenn die
ListType
Variable nicht den Wert „Short“ enthält, muss sie den Wert „Long“ enthalten. Das Skript setzt eine Variable namensFlag
auf „“, was eine leere Zeichenfolge ist. - Das Skript verwendet die
Flag
Variable im nächsten Abschnitt.
wenn [[ $? -eq 1 ]]; dann # Sie haben Abbrechen gedrückt oder das Dialogfenster geschlossen zenity --error --title="Scan abgelehnt" --width=200 \ --text="Hardware-Scan übersprungen" Ausgang 1 elif [ $ListType == "Kurz" ]; dann # sie haben das kurze Optionsfeld ausgewählt Flag="--kurz" anders # Sie haben das lange Optionsfeld ausgewählt Flagge="" fi
Nachdem das Skript nun weiß, welche Art von Scan der Benutzer wünscht, können wir den Hardware-Informations-Scan durchführen:
- Das Skript ruft den Befehl
hwinfo
auf und übergibt ihm den Wert in derFlag
Variablen. - Wenn
Flag
„–short“ enthält, führt der Befehlhwinfo
einen kurzen Scan durch. Wenn der Wert vonFlag
„“ ist, wird nichts anhwinfo
und es wird standardmäßig ein langer Scan durchgeführt. - Das Skript leitet die Ausgabe von
hwinfo
antee
weiter.tee
sendet die Ausgabe anzenity
und dieTempFile
. - Das Skript erstellt ein Fortschrittsbalken-Dialogfenster. Es legt die Breite und Höhe des Dialogfensters sowie die Titel- und Eingabeaufforderungstexte fest.
- Das Skript kann nicht im Voraus wissen, wie viele Informationen der
hwinfo
Befehl produzieren wird, daher kann es den Fortschrittsbalken nicht so setzen, dass er korrekt auf 100 Prozent fortschreitet. Die Option--pulsate
bewirkt, dass der Fortschrittsdialog einen sich bewegenden Indikator anzeigt. Dies informiert den Benutzer darüber, dass etwas passiert und er warten sollte. - Die Option
--auto-kill
beendet das Skript, wenn jemand auf „Abbrechen“ klickt. - Die Option
--auto-close
bewirkt, dass der Fortschrittsdialog automatisch geschlossen wird, wenn der überwachte Prozess abgeschlossen ist.
# Suchen Sie nach Hardwareinformationen mit dem entsprechenden Wert in $Flag hwinfo $Flag | tee >(zenity --width=200 --height=100 \ --title="Zusammentragen von Informationen" --progress \ --pulsate --text="Überprüfe Hardware..." \ --auto-kill --auto-close) >${TempFile}
Wenn der hwinfo
-Scan abgeschlossen ist, ruft das Skript zenity
auf, um mit der Option --text-info
ein Dialogfenster mit Textinformationen zu erstellen. Das Dialogfenster Textinformationen zeigt den Inhalt der TempFile
-Datei an:
- Das Skript legt die Breite und Höhe des Dialogfensters und den Titeltext fest.
- Die Option
--flename
wird verwendet, um den Inhalt der Datei zu lesen, die in der VariablenTempFIle
ist.
# Zeigen Sie die Hardwareinformationen in einem scrollenden Fenster an zenity --width=800 --height=600 \ --title "Hardwaredetails" \ --text-info --filename="${TempFile}"
Wenn der Benutzer das Textinformationsdialogfenster schließt, wird das Skript beendet.
Ausgang 0
Lassen Sie es uns anzünden und einen Blick darauf werfen.
./hardware-info.sh
Das Listenfeld erscheint. Standardmäßig ist die Option „Kurz“ ausgewählt.
Wählen wir „Long“ und klicken dann auf „OK“.
Das Fortschrittsfenster erscheint mit einer Schiebeanzeige. Es bleibt auf dem Bildschirm, bis der Hardware-Scan abgeschlossen ist.
Wenn der Hardware-Scan abgeschlossen ist, erscheint das Textinformationsdialogfenster mit Details aus dem Scan.
OK klicken."
Selbst ein eingefleischter Kommandozeilen-Jockey muss zugeben, dass ein paar GUI-Dialogfenster einem bescheidenen Bash-Skript einen professionellen Touch verleihen können.