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

Wie man Whiptail verwendet, um benutzerfreundlichere interaktive Skripte zu erstellen

Nur wenige Systemadministratoren in der Linux-Welt müssen von der Leistungsfähigkeit und Bedeutung von Skripten überzeugt werden. Skripts sind überall und Sie wissen, dass sie für die Linux-Systemverwaltung unerlässlich sind. Viele Skripte werden im Hintergrund ausgeführt, auch wenn sie manuell von einem Benutzer oder Administrator initiiert werden.

Einige Skripte geben jedoch Informationen an Benutzer weiter oder erbitten Informationen von ihnen. Sie können Skriptfunktionen wie echo verwenden oder read um diese Ziele zu erreichen. Leider zeigt keines dieser Tools die Informationen auf ausgefallene Weise oder auf eine Weise an, die die Aufmerksamkeit des Benutzers erregt.

Whiptail fügt Ihren Skripten ein interaktiveres Dialogfeld hinzu. Diese Felder bieten Informationen, erbitten Eingaben oder erzwingen eine Bestätigung. Der angezeigte Inhalt ist im Format einer textbasierten Benutzeroberfläche (TUI) und wird mit der Registerkarte navigiert Schlüssel. Auswahlen werden mit der Leertaste getroffen Schlüssel.

In diesem Artikel führe ich Sie durch die Installation von whiptail (es ist einfach!) und demonstrieren Sie dann ein paar grundlegende Beispiele.

[ Den Lesern gefiel auch: Welche Programmiersprachen sind für Systemadministratoren nützlich? ]

Whiptail installieren

Die Installation ist einfach. Ich verwende Fedora 33 für diese Beispiele. Whiptail ist Teil der größeren Newt-Bibliothek, die TUI-Fenstern Funktionalität hinzufügt.

Installieren Sie whiptail indem Sie den folgenden Befehl verwenden:

[damon@localhost ~]$ sudo dnf install newt

Das war's für die Installation.

In diesem Artikel erstellen Sie einzelne vim-Dateien mit dem Whiptail-spezifischen Code. Denken Sie daran, die folgenden Aufgaben für jede demonstrierte Datei auszuführen:

  • Bennen Sie es deutlich
  • Machen Sie es ausführbar, indem Sie chmod 744 demo.sh eingeben
  • Führen Sie es mit ./ aus vor dem Dateinamen, wenn der Speicherort nicht auf dem PATH liegt

Hinweis :Ich nehme vim an, weil ich es bevorzuge. Nano oder ein anderer Texteditor ist ausreichend.

Als Nächstes ist es an der Zeit, einige Skripte einzubeziehen.

Ein einfaches Dialogfeld anzeigen

Sie brauchen eigentlich kein Skript, um ein einfaches Dialogfeld von whiptail anzuzeigen . In diesem Beispiel deklarieren Sie eine Variable und rufen sie dann auf. Die Variable ist lediglich eine Art Meldung, die mit einem OK quittiert wird Taste. Es werden keine Auswahlmöglichkeiten angeboten und es wird keine Navigation verwendet.

Geben Sie an der Eingabeaufforderung die folgenden Informationen ein:

[damon@localhost ~]$ message="Today, we will learn about Whiptail."
[damon@localhost ~]$ whiptail --msgbox --title "Intro to Whiptail" "$message" 25 80

Sobald die Benutzeroberfläche angezeigt wird, beachten Sie, dass der von Ihnen angegebene Titel in der oberen Leiste angezeigt wird. Ihre Nachricht ist auch vorhanden. Das OK Schaltfläche ist verfügbar. Im whiptail Befehl, Sie haben zwei eingegeben

Werte:25 und 80 . Diese Werte sind Säulenmessungen und können angepasst werden. Sie definieren die Größe des Schnittstellenfensters. Achten Sie darauf, eine Größe auszuwählen, die nicht den gesamten Bildschirm einnimmt und verhindert, dass der Nutzer die gesamte Nachricht sieht oder OK auswählt . Die meisten Terminalfenster werden auf 80 Spalten oder mehr eingestellt.

Wenn Sie alle Komponenten der Benutzeroberfläche beobachtet haben, wählen Sie OK durch Drücken der Enter Schlüssel.

In diesem Beispiel haben Sie zwei Optionen verwendet:--msgbox und --title

Und jetzt ein interessanteres Beispiel.

Generieren Sie eine Abfrage

Es können Skripts geschrieben werden, die die Eingabe eines Nutzers akzeptieren. Wenn Sie ein Skript schreiben, das mit technisch nicht versierten Benutzern interagiert, kann es von Vorteil sein, eine benutzerfreundlichere Oberfläche zu erstellen. In diesem Beispiel werden dem Benutzer zwei Fragen gestellt:Name und Land.

Erstellen Sie eine Datei namens query.sh mit folgendem Inhalt.

#Part 1 - Query for the user's name
NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                        
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Greetings," $NAME
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

#Part 2 - Query for the user's country

COUNTRY=$(whiptail --inputbox "What country do you live in?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                       
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "I hope the weather is nice in" $COUNTRY
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

Beachten Sie, dass Sie in diesem Beispiel --inputbox verwendet haben statt --msgbox . Sie haben den whiptail organisiert Code als if/then-Anweisung.

Die 8 und 39 Werte definieren die Größe des Dialogfensters. Wenn Sie in Ihrer eigenen Laborumgebung weitermachen, ersetzen Sie 39 mit 10 , speichern Sie Ihre Änderungen und führen Sie whiptail erneut aus Code. Sie werden sehen, dass das Dialogfeld zu klein ist, um nützlich zu sein. Verwenden Sie den Tab Taste, um Abbrechen auszuwählen , und setzen Sie dann den Größenwert zurück auf 39 ab 10 .

Vergessen Sie nicht, die Berechtigungen festzulegen, um die Datei ausführbar zu machen, und verwenden Sie ./ um es vom aktuellen Standort aus auszuführen.

[damon@localhost ~]$ chmod 777 query.sh 
[damon@localhost ~]$ ./query.sh 

Hier sehen Sie die Ergebnisse nach Abschluss des Dialogfelds:

Sie haben Benutzern Informationen über ein Nachrichtenfeld gegeben und Informationen vom Benutzer über ein Eingabefeld gesammelt. Stellen Sie dem Benutzer als Nächstes einige zusätzliche Fragen.

Erstellen Sie ein Ja/Nein-Dialogfeld

Es gibt viele Variationen, um Fragen an den Benutzer zu stellen. In diesem Fall verwenden Sie eine einfache Ja/Nein-Abfrage, um herauszufinden, ob heute Dienstag ist. Sie können dies tun, indem Sie eine Testdatei mit dem Namen tuesday.sh erstellen und Platzieren des folgenden Inhalts darin:

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78); then
    echo "Happy Tuesday, exit status was $?."
else
    echo "Maybe it will be Tuesday tomorrow, exit status was $?."

fi

Anstelle der --inputbox oder --msgbox In den vorherigen Beispielen haben Sie den --yesno verwendet Möglichkeit. Wie das vorherige Beispiel ist auch dieses als Wenn/Dann-Abfrage organisiert.

Hier ist die resultierende Ausgabe:

Der --yesno Box-Option erlaubt uns auch, den Inhalt der "Ja"- und "Nein"-Felder zu bearbeiten. Hier ist ein Beispiel:

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78 --no-button "Not Tuesday" --yes-button "Tuesday"); then
echo "Happy Tuesday, exit status was $?."
else
echo "Maybe it will be Tuesday tomorrow, exit status was $?."
fi

Die einzige Änderung des Beispiels ist das Hinzufügen der beiden --no-button und --yes-button Optionen mit dem entsprechenden Text (in diesem Fall „Nicht Dienstag“ und „Dienstag“).

So sieht das resultierende Dialogfeld aus:

Eine letzte Sache. Whiptail sendet die Eingabe des Benutzers an stderr. Ja, Sie haben richtig gelesen:stderr und

nicht stdout, hier nehmen Sie die Eingaben des Nutzers auf, um sie im Skript zu verarbeiten. Der Weg, dieses Problem zu umgehen, besteht darin, die Umleitung umzukehren, sodass die Eingabe des Benutzers nach stdout geht.

Hier ist der Ausdruck dafür:

3>&1 1>&2 2>&3

Erklärung:

  • Erstellen Sie einen Dateideskriptor 3, der auf 1 (stdout) zeigt
  • Umleitung 1 (stdout) auf 2 (stderr)
  • Leite 2 (stderr) auf den Dateideskriptor 3 um, der auf stdout zeigt

So sieht es in einem Skript-Snippet aus der obigen --inputbox aus Beispiel:

NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)

[Kostenloser Spickzettel:Kubernetes-Glossar] 

Abschluss

Ich habe einige grundlegende Beispiele gezeigt, aber whiptail kann noch viel mehr. Ich habe hier genug bereitgestellt, um Ihnen den Einstieg zu erleichtern, und es gibt viele nützliche Tutorials online. Ihre Skripte benötigen eine Möglichkeit, die Eingaben der Benutzer zu verarbeiten. Ich empfehle Ihnen, Ihre interaktiven Skripts zu überprüfen, um festzustellen, ob das Hinzufügen von TUI-Dialogfeldern hilfreich wäre.

Hier ist eine Liste der primären Boxoptionen, die für whiptail verfügbar sind :

  • --Titel
  • --infobox
  • --msgbox
  • --ja nein
  • --Eingabefeld
  • --Passwortfeld
  • --Menü
  • --Textfeld
  • --Checkliste
  • --Radioliste
  • --Gauge

Linux
  1. So erstellen und verwenden Sie Subdomains

  2. So verwenden Sie GParted zum einfachen Erstellen und Ändern der Größe von Partitionen

  3. So erstellen Sie einen Alias ​​und verwenden den Alias-Befehl in Linux

  4. So verwenden Sie Eingaben in Ihren Shell-Skripten

  5. Was sind Shell-Skripte? Wie erstelle ich Shell-Skripte?

So erstellen Sie Shell-Skripte

So erstellen Sie GUI-Dialogfelder in Bash-Skripten mit Whiptail in Linux

So erstellen Sie Dokumente mit Bash-Skripten

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

Wie verwende ich if-else in Shell-Skripten?