GNU/Linux >> Znalost Linux >  >> Linux

Uživatelské rozhraní s dialogem. Bash skriptování (IV)

Toto je poslední článek ze série zaměřené na skriptování Gnu Bash. V prvním článku jsme právě vytvořili jednoduchý skript s příkazy, jeden po druhém. Také jsme viděli použití některých proměnných.
Druhý článek se týkal některých struktur kontroly bash. Třetí se týkala přesměrování, potrubí a nahrazování příkazů.
V tomto posledním (prozatím) ukážu, jak vytvořit uživatelská rozhraní s dialogem v našich skriptech.

Dialogové okno instalace

Zdrojový kód pro kompilaci lze stáhnout zde:https://invisible-island.net/dialog/. Chcete-li nainstalovat předkompilované binární soubory, vaše distribuce má určitě balíček s názvem ‚dialog‘, který můžete nainstalovat pomocí nástrojů balíčku.

Obecné možnosti

Následující možnosti platí pro každý widget, který můžeme použít v dialogu. Zde uvedené nejsou všechny, ale ty, které používám nejvíce.

  • --ascii-lines Namísto kreslení grafických čar kolem rámečků „+“ a „-“ na stejném místě.
  • --title název Určuje řetězec názvu, který se zobrazí v horní části dialogového okna.
  • --default-button řetězec Nastavte předvolené tlačítko ve widgetu. Normálně je první tlačítko v každém widgetu výchozí.
  • --default-item řetězec Nastavte výchozí položku v kontrolním seznamu, formuláři nebo nabídce.
  • --no-lines Namísto kreslení čar kolem rámečků nakreslete na stejné místo mezery.
  • --no-shadow Potlačit stíny, které by byly vykresleny vpravo a dole v každém dialogovém okně
  • --backtitle backtitle Určuje řetězec backtitle, který se zobrazí v horní části obrazovky.
  • --stdout Přímý výstup na standardní výstup. Užitečné k uložení uživatelské volby nebo odpovědi do proměnné

Například:

dialog --backtitle 'this is backtitle' --title 'Title' --infobox "This is just an infobox with some options settled" 0 0

by vytvořil tento výstup:

Další příklady:

Můj návrh pro skripty s několika obrazovkami je přidat alias s některými obecnými možnostmi, abyste nemuseli pokaždé psát (nebo kopírovat), jako je toto:

alias dialog="dialog --backtitle 'this is backtitle' --title 'Title' --stdout"
dialog --infobox "This is just an infobox" 0 0

Některé widgety

Informační schránka

Je to příklad shora. Syntaxe je:

--infobox text height width

Kde text je text, který se má zobrazit, a výška a šířka jsou velikostí dialogového okna. Můžete použít výstup příkazu pro text s náhradou příkazu, tj. --infobox "$(cat somefile.txt)" . Velikost je vyjádřena ve znacích, hodnota 0 znamená automaticky.

ano

Typické pole ve stylu dotazu s tlačítky pro odpověď „Ano“ a „Ne“. Syntaxe je:

--yesno text height width

Můžeme to použít na bloku if-then-else s nějakým kódem, jako je tento:

if dialog --yesno "continue?" 0 0
then
	echo "You choose to continue"
	some_command
	some_other_command
else 
	echo "no"
fi

Rolovací seznam možností s výběrem jedné položky. Syntaxe je:

--menu text height width menu-height tagX itemX tagY itemY

Každá položka nabídky se skládá z řetězce značek a řetězce položek. Myslím, že je skvělé kombinovat s blokem case-esac jako v dalším příkladu:

case $(dialog --menu "A menu of choices " 0 0 0 a item\ 1 b item\ 2 c item\ 3 d item\ 4) 
in 
	a) 
		echo "Item A" 
		some commands
		;; 
	b)
		echo "Item B" 
		some other commands
		;; 
	*) 
		echo other
		;; 
esac

vstupní pole

Vstupní pole je užitečné, když chcete položit otázky, které vyžadují, aby uživatel jako odpověď vložil řetězec. Syntaxe je:

--inputbox text height width [init]

init je volitelná a lze ji použít k nastavení výchozí odpovědi.

kontrolní seznam

Pole kontrolního seznamu je podobné oknu nabídky:ve formě nabídky je zobrazeno několik položek. Ale místo výběru pouze jednoho záznamu lze každý záznam zapnout nebo vypnout. Syntaxe je:

--checklist text height width list-height tag item status

stav může být zapnutý nebo vypnutý. S vybranými možnostmi můžeme pracovat se smyčkou for a case block pro vyhodnocení vybraných možností. Příklad:

for i in $(dialog --checklist "A menu of choices " 0 0 0 a item\ 1 off b item\ 2 off c item\ 3 off )
do 
	case $i in
		a)
			echo "item 1 selected"
			;;
		b)
			echo "item 2 selected"
			;;
		c)
			echo "item 3 selected"
			;;
	esac
done

Alternativou je radiolist, kde si uživatel může vybrat pouze jednu položku.

rozchod

Typický ukazatel průběhu. Měřič ukazuje procento. Nová procenta se čtou ze standardního vstupu, jedno celé číslo na řádek. Syntaxe je:

--gauge text height width [percent]

Procento je volitelné a představuje počáteční procento hotovo. To lze použít s trubkami. Například:

seq 1 100|dialog --gauge "A gauge" 0 0

Kalendář

Pole kalendáře zobrazuje měsíc, den a rok. Syntaxe je:

--calendar text height width day month year

Pokud hodnoty pro den, měsíc nebo rok chybí nebo jsou záporné, použije se aktuální datum.

Kam jet odtud

Právě jsem ukázal několik dostupných widgetů (je jich více než dvacet). Manuálová stránka dialogu poskytuje nápovědu pro všechny z nich.

Dialog samozřejmě není jediným dostupným nástrojem pro vytváření textových uživatelských rozhraní. Existují alternativy jako Xdialog, Whiptail (oba jsou zmíněny na manuálové stránce dialogu) nebo Zenity. Pamatujte, že existuje více než jeden způsob, jak to udělat.

Tato série čtyř článků o skriptování bash je ještě hodně daleko k dokončení. Mým záměrem je přimět vás, abyste se cítili dostatečně zvědaví, abyste to prozkoumali sami. Mějte v ruce bash manpage (to může být někdy matoucí, alespoň pro mě). A mějte blíže k vám Advanced Bash Scripting Guide, kde najdete obsáhlejší průvodce, plný příkladů.


Linux
  1. Bash skriptování (I)

  2. Alias ​​s proměnnou v bash

  3. Vytvořte pole se všemi síťovými rozhraními v bash

  1. Řetězce Bash Concatenate

  2. Bash -c s pozičními parametry?

  3. Jak napsat víceřádkový řetězec pomocí Bash s proměnnými?

  1. Shell Scripting Část I:Začínáme se skriptováním bash

  2. Skriptování Bash – smyčka dokud a dokud vysvětlená s příklady

  3. Bash skriptování – pro smyčku vysvětlenou s příklady