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