přejít na obsah přejít na navigaci

Linux E X P R E S, Bash 16: select

Bash 16: select

V tomto díle seriálu nás čeká poslední z větvicích konstrukcí - příkaz select. Umožní nám snadno vytvářet textové nabídky, ze kterých si bude moci uživatel vybírat.


Příkaz select

Mějme seznam nějakých možností a chtějme, aby si z nich uživatel mohl vybrat. To je zadání jako šité na míru pro příkaz select. Příbalový leták (v našem případě manuálová stránka) nám radí postupovat takto: select jmeno [ in seznam ] ; do prikazy ; done. Na místo jmeno doplníme jméno proměnné bez znaku dolar.

Select v angličtině znamená vybrat, zvolit a vyvolit. V roli přídavného jména pak výběrový a exkluzivní. Osobně jsem se s tímto slovem setkal prvně na osmibitových počítačích Atari, kde byl select prostřední z pěti systémových kláves.

Hranaté závorky říkají, že slůvko in a následující seznam hodnot oddělených mezerami nejsou povinné. My je však uvádět budeme a select nám z nich posléze sestaví přehlednou nabídku. Pomocné do již známe, následuje seznam příkazů oddělených středníkem nebo novým řádkem a konstrukci zakončuje done.

Použití ve skriptech

Nejlépe si to samozřejmě ukážeme na příkladu. Začíná jaro, ve vzduchu se vznáší různé věci, třeba volby nebo chřipka. Zeptejme se uživatelů, co nejčastěji na chřipku používají:

select lek in multivitamín tamiflu viagra ; do echo Vybráno: $lek ; done

Po zadání tohoto řádku do Bashe se zobrazí číslovaný seznam o třech položkách (multivitamín, tamiflu, viagra) a pod ním výzva k odpovědi (čekající kurzor a zvláštní forma promptu). Odpovídáme číslem a klávesou [Enter] (Return). Do proměnné lek je vložena příslušná položka seznamu (nikoli číslo), jak můžeme vidět na výpisu jejího obsahu příkazem echo.

Možná vás zaskočí, že konstrukce se neukončí a ptá se znovu. Opravdu se chová jako smyčka. Při vkládání z klávesnice ji nezastaví ani prázdný řetězec, tedy pokud naprázdno odentrujeme. Ostatně vložíme-li cokoli nad rozsah seznamu, nabude proměnná hodnotu prázdného řetězce. Vkládání ukončíme kombinací kláves [Ctrl+d]. Chování selectu jakožto smyčky můžeme potlačit uvedením break jako posledního v seznamu prováděných příkazů před závěrečným done. Ukážeme si to na dalším příkladu, tentokrát rozepsaném na více řádků. Mnohé lidi postihne viróza v důsledku špatně těsnících oken. Zeptejme se jich tedy, kudy nejvíce táhne:

echo "Zvolte typ oken:"
select okno in dřevěná plastová ikspé; do
echo "Nejděravější okna jsou "$okno
break
done

Select má své výhody i nevýhody. Mezi klady patří jistě skutečnost, že seznam nejen automaticky očísluje, ale také jej naformátuje do sloupců, pokud by byl příliš dlouhý. Pohodlné je v některých případech zadávat seznam položek pomocí pole (viz 5. díl). Nevýhodou case je naopak zase to, že si nemůžete zvolit vlastní způsob označování jednotlivých položek. Horší však je, že bez ohledu na odpověď vykonává vždy stejné příkazy.



Alternativa

Pokud bychom chtěli, aby se při různých odpovědích vykonávaly různé sady příkazů, museli bychom to udělat pomocí konstrukce case vložené mezi příkazy uvnitř konstrukce select. Když k tomu připočtu svou lenost, tedy neochotu enterovat po každém výběru, jsem již krůček od toho, abych si seznam vytvořil ručně. Přepis výše uvedeného výběru by tak mohl vypadat třeba takto:

echo "Zvolte typ oken:"
echo "a) dřevěná"
echo "b) plastová"
echo "c) ikspé"
echo -n "#> "
read -n 1 okno
echo
case $okno in
a) echo "Zkuste plast" ;;
b) echo "To mne překvapuje" ;;
c) echo "Aha..." ;;
*) echo "Nesprávný výběr" ;;
esac

Nejpre jsem pomocí echo vytvořil seznam i s promptem pro kurzor. Položky jsou označeny písmeny. Potom pomocí read -n 1 (viz 14. díl) načítám právě jeden znak do proměnné okno. Na základě její hodnoty se pak s pomocí case (viz 15. díl) vypíše příslušný text.

Závěr

Dnes jsme probrali poslední z konstrukcí, které nám Bash pro skriptování nabízí. Nebuďte ale smutní, ještě několik interních příkazů neznáme. Také jsme neprobrali lecjaké fígle. Příště si ukážeme některé takové se zvláštním druhem proměnných. A další díl pak bude opakovací.

Nahoru

Odkazy

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Bohdan Milar

(*1976) vystudoval Vysokou školu ekonomickou v Praze. Pracuje v obecně prospěšné společnosti Brailcom. Unixové systémy používá od roku 1997. Má rád Bash, FreeMiNT a LaTeX.




Public Relations

Každý den se do práce těším, říká Viktor ze Siemens Advanta

Viktor ŽaludViktor Žalud je hardwarový vývojář a v Siemens Advanta se zaměřuje na vývoj zařízení pro průmyslovou automatizaci. „Každé zařízení musím navrhnout, nechat vyrobit, otestovat jeho funkcionalitu a zajistit, aby splňovalo všechny předpisy a normy,“ popisuje svou práci. „Práce mě baví i proto, že každý půlrok vymýšlím řešení pro jiný výrobek a všechny jsou unikátní,“ vysvětluje.

Pokračování ...



Public Relations

On-line konference VMworld 2021: stovky přednášek a tutoriálů zdarma

VMworld 2021Základem úspěchu každého byznysu je v dnešní době schopnost inovovat a přizpůsobovat se požadavkům trhu, a to rychle. Dle výzkumu Forrester 88 % zástupců firem potvrzuje, že spokojenost zákazníků je přímo závislá na zlepšování a inovacích jejich aplikací.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 10. April

Zapojte se do tvorby distribuce Mageia

Podílejte se na vytváření balíčků pro Mageiu, dělejte, co je potřeba, staňte se baličem


Pavel Fric

Pavel Fric, 13. March

Lollypop

Lollypop je hudební přehrávač navržený, jak ukazuje jeho podoba, aby výborně zapadl do pracovního...


Pavel Fric

Pavel Fric, 26. February

QElectroTech

Kreslení elektrotechnických i jiných výkresů


Všechny blogy »


Public Relations

Jak si vybrat spolehlivé online kasino?

CasinoVýběr poctivé herny je otázka, která se týká nejen začínajících hráčů, ale i hráčů se zkušenostmi. Poctivé casino je skutečnou šancí nejen si užít proces, ale také vyhrát. Online zábavní portál je specializovaná služba, která uživatelům umožňuje hrát o peníze. Online herní průmysl se neustále vyvíjí a online kasina úspěšně konkurují kamenným provozovnám.

Pokračování ...