GNU/Linux >> Znalost Linux >  >> Linux

Jak používat whiptail k vytváření uživatelsky přívětivějších interaktivních skriptů

Jen málo systémových administrátorů ve světě Linuxu musí být přesvědčeno o síle a důležitosti skriptů. Skripty jsou všude a vy víte, že jsou nezbytné pro správu systému Linux. Mnoho skriptů běží tiše, i když je spouští ručně uživatel nebo správce.

Některé skripty však předávají informace uživatelům nebo od nich informace vyžadují. Můžete použít funkce skriptování, jako je echo nebo read k dosažení těchto cílů. Bohužel žádný z těchto nástrojů nezobrazuje informace efektním způsobem nebo způsobem, který upoutá pozornost uživatele.

Whiptail přidává do vašich skriptů interaktivnější dialogové okno. Tato pole poskytují informace, vyžadují vstup nebo vynucují potvrzení. Zobrazený obsah je ve formátu textového uživatelského rozhraní (TUI) a lze jej procházet pomocí Tab klíč. Výběry se vybírají pomocí mezera klíč.

V tomto článku vás provedu instalací whiptail (je to snadné!) a poté předveďte několik základních příkladů.

[ Čtenářům se také líbilo: Které programovací jazyky jsou užitečné pro správce systému? ]

Nainstalujte whiptail

Instalace je snadná. Pro tyto příklady používám Fedoru 33. Whiptail je součástí větší knihovny Mloků, která přidává funkčnost do oken TUI.

Nainstalujte whiptail pomocí následujícího příkazu:

[damon@localhost ~]$ sudo dnf install newt

To je vše pro instalaci.

V tomto článku vytvoříte jednotlivé soubory vim s kódem specifickým pro whiptail. Nezapomeňte provést následující úkoly pro každý ukázaný soubor:

  • Pojmenujte to jasně
  • Udělejte jej spustitelným zadáním chmod 744 demo.sh
  • Spusťte jej pomocí ./ před názvem souboru, pokud umístění není podél PATH

Poznámka :Předpokládám vim, protože to preferuji. Nano nebo jakýkoli jiný textový editor je dostačující.

Dále je čas zapojit nějaké skripty.

Zobrazení základního dialogového okna

K zobrazení základního dialogového okna z whiptail vlastně nepotřebujete skript . V tomto příkladu deklarujete a poté zavoláte proměnnou. Proměnná je pouze zpráva nějakého druhu, která bude potvrzena OK knoflík. Nejsou nabízeny žádné možnosti a není používána žádná navigace.

Na příkazovém řádku zadejte následující informace:

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

Jakmile se zobrazí rozhraní, všimněte si, že se v horní liště objeví vámi zadaný název. Vaše zpráva je také přítomna. Tlačítko OK tlačítko je k dispozici. V whiptail zadali jste dva

hodnoty:25 a 80 . Tyto hodnoty jsou sloupcové míry a lze je upravit. Definují velikost okna rozhraní. Buďte opatrní, abyste vybrali velikost, která nezabere celou obrazovku a zabráníte uživateli zobrazit celou zprávu nebo vybrat OK . Většina oken Terminálu bude nastavena na 80 nebo více sloupců.

Jakmile si prohlédnete všechny součásti rozhraní, vyberte OK stisknutím klávesy Enter klíč.

V tomto příkladu jste použili dvě možnosti:--msgbox a --title

A teď zajímavější příklad.

Vygenerujte dotaz

Je možné psát skripty, které přijímají vstup uživatele. Pokud píšete skript, který bude komunikovat s netechnickými uživateli, může být přínosné vytvořit uživatelsky přívětivější rozhraní. V tomto příkladu budou uživateli položeny dvě otázky:Jméno a země.

Vytvořte soubor s názvem query.sh s následujícím obsahem.

#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)"

Všimněte si, že v tomto příkladu jste použili --inputbox místo --msgbox . Uspořádali jste whiptail kód jako příkaz if/then.

8 a 39 hodnoty definují velikost dialogového okna. Pokud to sledujete ve svém vlastním laboratorním prostředí, nahraďte 39 s 10 , uložte změny a znovu spusťte whiptail kód. Uvidíte, že dialogové okno je příliš malé na to, aby bylo užitečné. Použijte Tab vyberte Zrušit a poté nastavte hodnotu velikosti zpět na 39 od 10 .

Nezapomeňte nastavit oprávnění, aby byl soubor spustitelný, a použijte ./ spustit z aktuálního umístění.

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

Zde je pohled na výsledky po dokončení dialogového okna:

Poskytli jste uživatelům informace prostřednictvím zprávy a shromáždili informace od uživatele prostřednictvím vstupního pole. Poté uživateli položte další otázky.

Vytvořit dialogové okno ano/ne

Existuje mnoho variant pro kladení otázek uživatele. V tomto případě použijete jednoduchý dotaz ano/ne, abyste zjistili, zda je dnes úterý. Můžete to udělat vytvořením testovacího souboru s názvem tuesday.sh a umístíte do něj následující obsah:

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

Místo --inputbox nebo --msgbox z předchozích příkladů jste použili --yesno volba. Stejně jako předchozí příklad je i tento uspořádán jako dotaz if/then.

Zde je výsledný výstup:

--yesno box nám také umožňuje upravovat obsah polí "Ano" a "Ne". Zde je příklad:

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

Jedinou úpravou příkladu je přidání dvou --no-button a --yes-button možnosti s odpovídajícím textem (v tomto případě „Ne úterý“ a „Úterý“).

Takto vypadá výsledné dialogové okno:

Poslední věc. Whiptail odešle vstup uživatele do stderr. Ano, čtete správně:stderr a

ne stdout, což je místo, kde přebíráte vstup uživatele, abyste jej využili ve skriptu. Řešením tohoto problému je obrátit přesměrování tak, aby vstup uživatele přešel na stdout.

Zde je fráze, jak to udělat:

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

Vysvětlení:

  • Vytvořte deskriptor souboru 3, který ukazuje na 1 (stdout)
  • Přesměrování 1 (stdout) na 2 (stderr)
  • Přesměrujte 2 (stderr) na deskriptor souboru 3, který ukazuje na stdout

Takto to vypadá ve fragmentu skriptu z výše uvedeného --inputbox příklad:

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

[ Bezplatný cheat:Slovník Kubernetes ] 

Sbalit

Ukázal jsem několik základních příkladů, ale whiptail dokáže mnohem víc. Poskytl jsem vám toho dost, abyste se do toho dostali, a na internetu je mnoho užitečných výukových programů. Vaše skripty budou potřebovat způsob, jak využít vstup, který uživatelé zadali. Doporučuji, abyste si prohlédli své interaktivní skripty, abyste zjistili, zda by přidání dialogových oken TUI pomohlo.

Zde je seznam primárních možností boxu dostupných pro whiptail :

  • --title
  • --infobox
  • --msgbox
  • -ano
  • --inputbox
  • --passwordbox
  • --menu
  • -textbox
  • --kontrolní seznam
  • -radiolist
  • --rozchod

Linux
  1. Jak používat GParted ke snadnému vytváření a změně velikosti oddílů

  2. Jak vytvořit alias a používat příkaz Alias ​​v Linuxu

  3. Co jsou Shell Scripts? Jak vytvořit Shell skripty?

  1. Jak vytvořit a používat subdomény

  2. Jak používat vstupy ve skriptech shellu

  3. Jak použít rsyslog k vytvoření serveru pro agregaci protokolů Linux

  1. Jak používat příkaz mkdir k vytvoření nebo vytvoření adresáře Linux

  2. Jak vytvořit Ansible role a používat je v Playbooku

  3. Jak Systemd používá skripty /etc/init.d?