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

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

RedHat

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

Odhalte budoucnost IT

RedHatNenechte si ujít jedinečný open source event, který se po čtyřech letech vrací do Česka v netradičním formátu.

Pokračování ...


SolarWinds

Public Relations

NetApp nabízí nejmenší HCI v podobě 2nodového storage clusteru!

ALEFNetApp HCI je přesvědčivé řešení pro moderní datová centra, které nabízí nezávislé škálování výpočetních nebo úložných uzlů, QoS pro detailní řízení výkonu aplikací, multitenantnost pro více aplikací sdílejících stejné zdroje, schopnost nezávislého škálování úložných a výpočetních zdrojů a pokročilé datové služby včetně domén replikace a ochrany.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 21. August

Sayonara Player 1.5.1

Přehrávač, jak má být. Poslední dobou vývoj šlape


Pavel Fric

Pavel Fric, 26. January

MuseScore 3

První aktualizace třetí řady notačního editoru MuseScore


Redakce

Redakce, 21. December

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Všechny blogy »

Acronis