So verwenden Sie NCurses -Widgets in Shell -Skripten unter Linux

So verwenden Sie NCurses -Widgets in Shell -Skripten unter Linux

In diesem Tutorial lernen wir die Grundlagen der Dialogdienstprogramm, Um zu verwenden Ncurses Widget in unseren Shell -Skripten. Wir werden sehen, wie der Dialog in den am häufigsten verwendeten Linux -Verteilungen installiert wird, einige der gängigen Optionen, mit denen wir das Verhalten des Dialogfelds ändern können, wie einige Widgets verwendet werden. unter den anderen: Eingabefeld, Checkliste, Radiolist Und ja Nein. Schließlich werden wir sehen, wie die von der Widget -Verarbeitung erhaltenen Daten verwendet werden.

In diesem Tutorial lernen Sie:

  • So installieren Sie das Dialogdienstprogramm unter Linux
  • Was sind die relevantesten Dialogoptionen
  • So verwenden Sie die Inputbox, Checkliste, Radiolist, Kennwortbox, MSBox, Kalender und Yesno -Widgets
  • So verwalten Daten aus der Widget -Verarbeitung abgeleitet


Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Verteilungsunabhängige
Software Das Dialogdienstprogramm ist erforderlich, um diesem Tutorial zu folgen
Andere Vertrautheit mit der Befehlszeilenschnittstelle und der Shell -Umleitung
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Installation unter Linux

Der Dialog Das Dienstprogramm ist in allen wichtigen Linux -Distributions -Standard -Repositories erhältlich. Daher können wir unseren bevorzugten Paketmanager verwenden, um es zu installieren. Wenn wir zum Beispiel Fedora verwenden, können wir ausführen:



$ sudo dnf install Dialog installieren

Auf Debian können wir rennen:

$ sudo APT-Get Installation Dialog

Der Dialog Das Dienstprogramm ist auch im Archlinux Core -Repository enthalten, sodass wir es über installieren können Pacman:

$ sudo pacman -s Dialog

Die Installationsbefehle gilt auch für Derivate der oben genannten Verteilungen.

Gemeinsame Dialogoptionen

Wir nennen diese Optionen "gemeinsam", weil sie unabhängig von der Art von Widget verwendet werden können, die wir verwenden möchten. Hier werden wir nur einige von ihnen sehen, die möglicherweise von unmittelbarem Interesse sein, wenn wir anfangen zu benutzen Dialog.

Einstellungen Ein Widget -Box -Titel: Die Option -title -Option

Durch Verwendung der --Titel Option Wir können eine Zeichenfolge angeben, die als Widget -Titel verwendet wird. Es wird oben in der Box angezeigt. Hier ist ein Beispiel:

$ Dialog -Title "Dialog -Titel" -Inputbox "Geben Sie Ihren Namen ein:" 0 0

Hier ist das, was als Ergebnis des obigen Befehls angezeigt wird:





Kombinieren von Widgets: Die Option -und Widget -Option:

Der --und Widget Option kann verwendet werden, um mehr Widgets zu „ketten“, sodass wir nach der Verwendung der ersten sofort mit der zweiten aufgefordert werden. Die Kette wird gestoppt, wenn einer der Dialoge einen Status ungleich Null zurückgibt. Ein Beispiel für die Verwendung ist:

$ Dialog \-Inputbox "Geben Sie Ihren Namen ein:" 0 0 \-und ​​-Widget--Inputbox "Geben Sie Ihr Alter ein:" 0 0

Sobald wir den obigen Befehl gestartet haben, wird das erste Eingabe -Widget, mit dem wir für unseren Namen aufgefordert werden, angezeigt. Sobald wir die Eingabe bestätigen, indem wir auf die klicken OK Taste, das nächste Widget wird angezeigt, und wir werden aufgefordert, unser Alter einzugeben.

Löschen des Bildschirms mit der Option -clear

Wenn wir das verwenden --und Widget Option Der Inhalt, der von einem Widget erstellt wurde, das von der vorherigen erstellt wurde. Wenn die Widgets nicht genau den selben Bildschirmraum einnehmen, wären die beiden Inhalte gemischt, und dies würde ein Chaos schaffen.

Um sich überlappende Inhalte zu vermeiden, können wir die verwenden --klar Möglichkeit; Wenn wir dies tun, wird der Inhalt eines Widgets gelöscht, bevor das nächste Widget angezeigt wird: Nur die Hintergrundfarbe bleibt erhalten.

Einstellen der A -Schaltfläche, die standardmäßig hervorgehoben wird: Die Option -default -Button -Option

Abhängig vom von uns verwendeten Widget kann mehr als eine Taste auf dem Bildschirm angezeigt werden, und standardmäßig wird eine davon standardmäßig hervorgehoben, wobei die Standardaktion festgelegt wird, wenn der Benutzer eingegeben wird.

Wir können das überschreiben
Widget Standard verwenden mit dem --Standard-Button Option gefolgt vom Namen der Schaltfläche, einer unter OK, Ja, stornieren, NEIN, Hilfe oder extra.



Diese Option kann beispielsweise beispielsweise bei der Bestätigung vor der Ausführung eines potenziellen
gefährliche Handlung:

$ Dialog-Default-Button "no"---Inputbox "Geben Sie Ihren Namen ein:" 0 0


Wie Sie aus dem Screenshot sehen können, haben wir so erstellt, dass die Schaltfläche „Nein“ standardmäßig ausgewählt wird, damit der Benutzer explizit „Ja“ auswählen sollte, um seine Auswahl zu bestätigen.

Festlegen des Standardelements ausgewählter Element in einer Liste mit -Default -iTEM

Wenn wir eine Checkliste oder ein Menü -Widget verwenden, wird das erste Element in der Liste der möglichen Auswahlmöglichkeiten standardmäßig ausgewählt. Durch Verwendung der --Standard-Element Option und Referenzierung auf ein Element können wir es als alternative Standardeinstellung verwenden:

$ Dialog-Default-Item 2-Checklist "Wählen Sie:" 0 0 5 \ 1 "Erstes Element" Aus \ 2 "zweites Element" aus \ 3 "drittes Element" aus




Wie Sie sehen können, haben wir im obigen Beispiel das Element durch sein Schild, 2 In diesem Fall (wir werden später dies erweitern).

Angeben einer Zeitverzögerung nach Bestätigung: Die Option -schlafe Option

Manchmal möchten wir, dass unsere Bewerbung nach der Verarbeitung eines Dialogfelds auf eine bestimmte Anzahl von Sekunden wartet. Um dieses Verhalten zu erreichen, können wir die verwenden --schlafen Option und geben Sie die Anzahl der Sekunden an, um als Wert zu warten:

$ Dialog -Sleep 3 -Inputbox "Geben Sie Ihren Namen ein:" 0 0

Als Ergebnis des obigen Befehls nach dem Eingabefeld Widget wird angezeigt und der Benutzer trifft die EINGEBEN Taste, 3 Sekunden werden gewartet, bevor der nächste Befehl im aufrufenden Skript durchgeführt wird.

Bereitstellung eines Auswahlausgleichs

In einigen Fällen möchten wir dem Benutzer möglicherweise eine maximale Anzahl von Sekunden geben, um seine Auswahl auszuführen. Die Dialoganwendung bietet die --Auszeit Option, das Verhalten zu erhalten. Die Anzahl der Timeout -Sekunden muss als Argument der Option übergeben werden. Wenn der Benutzer nach der angegebenen Anzahl von Sekunden nicht seine Auswahl ausführt, wird die Anwendung mit einem Fehlerstatus beendet:

$ Dialog -Timeout 3 -Inputbox "Geben Sie Ihren Namen ein:" 0 0

Einstellen alternativer Etiketten für Schaltflächen

Der Dialog Das Dienstprogramm bietet eine Reihe von Optionen, um die Standardbezeichnung für Schaltflächen zu überschreiben: Wir können die verwenden --Ausgangslabel, --Extra-Label, --Hilfslabel, --No-Label, --OK-Label, --Ja-Label Um die Beschriftungen der Schaltflächen „Exit“, „Extra“, „Hilfe“, „Nein“, „OK“ und „Ja“ zu ändern.

Jede der oben genannten Optionen nimmt eine Zeichenfolge als Argument an, die als Taste -Etikett verwendet wird. Hier ist ein Beispiel für die Optionsnutzung:

$ Dialog-Default-Button "no" \ --no-label "Ich nicht" \--yes-Label "Ich mache" \--yesno "Willst du die Partition wirklich formatieren?"0 0

Der obige Befehl erzeugt das folgende Ergebnis:





Dialogwidgets

Bis jetzt haben wir einige der nützlichsten gesehen Dialog "Gemeinsame" Optionen. Jetzt werden wir sehen, wie einige der verfügbaren Widgets im Detail verwendet werden. Vor dem Fortfahren müssen wir die allgemeine Syntax angeben. Wenn wir einen Dialog starten, müssen wir immer drei Parameter bereitstellen:

  1. Der Text, der im Widget angezeigt wird;
  2. Die Widget -Breite;
  3. Die Widgethöhe;

Wenn wir einen Wert von bieten 0 Für die Breite oder Höhe wird der Wert des entsprechenden Attributs automatisch festgelegt.

Das Inputbox -Widget

Das inputBox -Widget wird verwendet, um den Benutzer aufzufordern, auf eine Frage mit einer Texteingabe zu antworten. Der Textparameter wird verwendet, um die Frage anzugeben: Wenn die Zeichenfolge länger ist als das Dialogfeld, wird letzteres scrollbar. Um dieses Widget zu verwenden, rufen wir mit dem Dialog auf --Eingabefeld Möglichkeit:



Beim Beenden wird die vom Benutzer bereitgestellte Eingabe im Dialogausgabe angezeigt, was standardmäßig standardmäßig ist Stderr.

Das Checklisten -Widget

Wir haben bereits gesehen, wie das Checklist -Widget in früheren Beispielen aussieht: In dieser Art von Widget wird dem Benutzer eine Reihe von Auswahlmöglichkeiten zur Verfügung gestellt, die einen oder mehrere davon auswählen kann. Um dieses Widget zu verwenden, müssen wir das verwenden --Checkliste Option, und zusätzlich zu den Standard -drei Parametern, die an alle Widgets übergeben werden müssen, müssen wir auch die bereitstellen Listenhöhe und die ausgestellten Auswahlmöglichkeiten.



Der Zeilenhöhe Der Parameter wird verwendet, um festzustellen, wie viele Zeilen gleichzeitig angezeigt werden sollen: Wenn die Anzahl der Zeilen geringer ist als die verfügbaren Auswahlmöglichkeiten, wird das Menü scrollbar. Wenn wir zur Verfügung stellen 0 als Wert von Zeilenhöhe Die Anzahl der Zeilen entspricht der Anzahl der Auswahlmöglichkeiten.

Für jede Wahl müssen wir eine Kennung (Tag), einen Namen und einen Status angeben, der sein kann aus oder An. Wenn der Status ist An Die Wahl wird standardmäßig überprüft. Sobald wir unsere Entscheidungen bestätigen, werden die Tags, die sich auf den von uns überprüften Eintrag beziehen, angezeigt werden Stderr:

$ Dialog -Checklist "Elemente auswählen:" 0 0 0 \ 1 "Auswahl Nummer eins" Aus \ 2 "Auswahl Nummer zwei" auf \ 3 "Auswahl Nummer drei" Aus \ 4 "Auswahl Nummer vier" auf

Mit dem obigen Befehl haben wir das Menü mit 4 Optionen gestartet und die Optionen 2 und 4 standardmäßig überprüft. Die Ausgabe des Befehls ist Folgendes:



Das radiolistische Widget

Das Radiolisten -Widget wird gestartet, wenn der Dialog mit dem aufgerufen wird --Radiolist Möglichkeit. Es funktioniert ähnlich wie das Checklist -Widget, mit dem Unterschied, dass die Auswahl gegenseitig ausschließt, sodass nur ein Element ausgewählt werden kann. So verwenden wir das Widget:

$ Dialog -radiolist "Elemente auswählen:" 0 0 0 \ 1 "Auswahl Nummer eins" aus \ 2 "Auswahl Nummer zwei" auf \ 3 "Auswahl Nummer drei" Aus \ 4 "Auswahl Nummer vier" off "


Da sich die Auswahl gegenseitig ausschließt, wird nur die erste Option festgelegt An wird als Standard ausgewählt.



Fragen Sie den Benutzer nach einem Passwort mit dem Widget der Passwordbox -Widget nach einem Kennwort

Mit dem Widget des Passwortbox -Widgets wird ein Benutzer aufgefordert, ein Kennwort einzugeben. Aus Sicherheitsgründen wird der vom Benutzer eingegebene Text nicht angezeigt. Dieses Verhalten kann durch die Verwendung der geändert werden --unsicher Option: Wenn wir dies tun, zeigt das Widget ein Sternchen für jeden Buchstaben des im entsprechenden Feld eingegebenen Kennworts an.

Wir verwenden das Widget, indem wir Dialog mit dem starten --Passwortbox Möglichkeit:

$ Dialog -INSECURE -PASSWORDBOX "Geben Sie Ihr Passwort ein:" 0 0

Die Ausgabe des obigen Befehls ist:



Anzeige einer Nachricht mit dem MSGBox -Widget

Die Verwendung dieses Widgets ist wirklich einfach: Es wird aufgerufen, indem Dialog mit dem aufgerufen wird --msgbox Option und zeigt eine Nachricht an, die der Inhalt des ist Text Parameter. Ein einzelner OK Die Schaltfläche wird angezeigt:

$ Dialog -MSGBox "Dies ist eine sehr wichtige Nachricht, die sorgfältig gelesen werden sollte!"0 0




Das Kalender -Widget

Wir können das Kalender -Widget verwenden, indem wir das Dialogdienstprogramm mit dem aufrufen --Kalender Möglichkeit. Das Widget lässt uns ein Datum auswählen, indem wir Monat, Tag und Jahr auswählen, die in separaten Abschnitten des Widgets angezeigt werden. Es ist möglich, ein Standarddatum anzugeben, indem Sie es als Teil des Befehls verabschiedet haben.

Um das Widget mit dem „fünften Tag des Jahres 2020“ als Standarddatum zu beginnen, würden wir den folgenden Befehl ausführen:

$ Dialog -Calendar "Wählen Sie ein Datum aus:" 0 0 27 05 2020

Es erzeugt die folgende Ausgabe:






Wir können uns zwischen den Widget -Abschnitten mit dem bewegen TAB Taste und ändern die Parameter mit den Pfeiltasten. Sobald wir die Auswahl bestätigen, wird sie angezeigt Stderr im Format Tag/Monat/Jahr; Dies kann durch die Verwendung der verwendet werden --Datumsformat Option mit einem Format, das kompatibel mit Strftime als Argument angegeben. Um die Ausgabe im Format Jahr/Monat/Tag beispielsweise im Format zu erzielen, würden wir ausführen:

$ Dialog-datieren-format%y/%m/%d-Kalendar "Wählen Sie ein Datum" 0 0 27 05 2020

Fordern Sie den Benutzer zur Bestätigung ein: das Yesno -Widget

Wir haben dieses Widget bereits begegnet: Wir haben den Benutzer zur Bestätigung aufgefordert. Bei der Verwendung geben wir die Frage an, die über die gestellt werden soll Text Parameter. Abhängig von der Wahl der Benutzer wird ein Exit -Status zurückgegeben: 0 Wenn der Benutzer bestätigt, indem Sie auf die klicken Ja Taste, 1 ansonsten.

Um dieses Widget aufzurufen, müssen wir die verwenden --ja Nein Möglichkeit:

$ dialog -ja yesno "bestätigen Sie?"0 0

Hier ist das Widget:



Verwalten der Ausgabe, die von einem Widget erzeugt wird

Standardmäßig wird die von einem Widget erzeugte Ausgabe auf STDERR angezeigt. So müssen wir beispielsweise die Daten, die von einem Widget in eine Datei erhalten wurden Stderr In der Datei (wenn Sie mit Umbauten nicht vertraut sind, sollten Sie sich möglicherweise die Einführung in das Tutorial für Bash -Shell -Umbauten ansehen):

$ Dialog -Checklist "Elemente auswählen:" 0 0 0 \ 1 "Auswahl Nummer eins" aus \ 2 "Auswahl Nummer zwei" auf \ 3 "Auswahl Nummer drei" Aus \ 4 "Auswahl Nummer vier" auf 2> Auswahl.txt

Sobald der Benutzer seine Auswahl bestätigt, werden er geschrieben, platz getrennt in die Auswahl.txt Datei.

Was ist, wenn wir die Auswahl direkt in eine Variable speichern möchten?? Um die Aufgabe zu erfüllen, müssen wir die verwenden --Stdout Option, damit die Ausgabe des Widgets angezeigt wird Stdin anstatt Stderr:

$ Choices = "$ (Dialogfeld -StDout -Checklist" Elemente auswählen: "0 0 0 \ 1" Auswahl Nummer ein vier "auf)"


Im obigen Beispiel ist das Ergebnis der Widget -Verarbeitung über die zugänglich Auswahl Variable. Vielleicht möchten wir über sie gehen:

$ für die Wahl in $ Choices; echo "$ choice"; fertig 2 4

Um den Prozess des Prozesses zu verwalten ja Nein Widget müssen wir uns anders verhalten. Das Widget erzeugt, wie wir bereits gesehen haben. Wenn der Benutzer bestätigt und die Frage bestätigt wird, wird der Exit -Code auf festgelegt 0, sonst zu 1 (Das mag seltsam erscheinen, aber denken Sie daran, das 0 bedeutet OK während 1 ist ein Exit -Status, der bedeutet, dass ein Befehl nicht erfolgreich war). Wenn wir das wissen, können wir so etwas schreiben wie:

Wenn Dialog-ja, "möchten Sie eine Instanz von Gnome-terminal öffnen ?"0 0; dann klare gnom-terminale fi 

Schlussfolgerungen

In diesem Tutorial haben wir gesehen, wie wir das verwenden können Dialog Anwendung zu verwenden Ncurses Widget in Shell -Skripten. Zuerst haben wir einige gemeinsame Optionen gesehen, die unabhängig vom Widget -Typ verwendet werden können, als wir uns einige Widgets speziell angesehen haben. Es gibt noch viele weitere Widgets, die mit verwendet werden können Dialog: Für eine vollständige Liste empfehle ich Ihnen, sich das Anwendungshandbuch anzusehen.

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • So integrieren Sie Dialogfelder in Shell -Skripte mit Whiptail
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Erste Schritte mit Tkinter für Python Tutorial
  • Verschachtelte Schleifen in Bash -Skripten
  • Dinge zu installieren auf Ubuntu 22.04
  • Linux -Befehle: Top 20 wichtigste Befehle, die Sie benötigen, um…
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
  • Grundlegende Linux -Befehle
  • Installieren Sie Arch Linux in VMware Workstation