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

Linux E X P R E S, Bash 15: case

Bash 15: case

Pokud jste sami nepřišli na to, jak s pomocí read (který jsme brali minule) vytvářet textové rozhraní pro komunikaci s uživatelem, bude se vám jistě hodit příkaz case, který si ukážeme tentokrát.


Příkaz case

Case nám podobně jako if umožňuje vytvořit konstrukci, ve které se budou provádět za různých okolností různé příkazy nebo skupiny příkazů. Ve spojení s minule probíraným read vytváří ideální prostředí pro tvorbu interaktivních skriptů. Read zprostředkuje vstup od uživatele tím, že naplní nějakou proměnou např. znaky z klávesnice a case na základě hodnoty této proměnné provede příslušnou akci.

Tuto situaci bychom samozřejmě mohli řešit také použitím konstrukce if, elif, elif, else, fi. Ta má ovšem složitější formu zápisu a hodí se při rozhodování podle složitějších kritérií. Syntaxe příkazu case začíná slovy case slovo in, kde místo slova vkládáme nejčastěji hodnotu proměnné, tj. jméno proměnné uvozené znakem dolar ($), např. case $promenna in.

Za uvozující formulí následuje seznam hodnot (v závorce, resp. zakončených zavírací závorkou), kterým když proměnná vyhovuje, vykoná se první sada příkazů. Příkazy v sadě jsou odděleny středníkem (nebo koncem řádku) a celá sada je potom zakončena dvěma středníky. Následuje další podmínka a sada příkazů atd. Nakonec můžeme vložit obecnou podmínku znakem hvězdička, což znamená cokoli, co nevyhovovalo předchozím podmínkám. Celá konstrukce je zakončena slovem esac (tj. pozpátku case, podobně jako u if a fi).

Použití ve skriptech

Je mi jasné, že předchozí popis vyžaduje praktickou ukázku. Uvedu krátký skript, který na základě zadání čísla od jedné do pěti pomocí příkazu read -n 1 (viz minulý díl) zobrazí slovní hodnocení školního prospěchu. Hodnotu známky budeme načítat do proměnné znamka.

#!/bin/bash
echo "Slovní hodnocení prospěchu"
echo -n "Zadejte známku: "
read -n 1 znamka
echo
case $znamka in
1) echo "Výborný" ;;
2) echo "Chvalitebný" ;;
3) echo "Dobrý" ;;
4) echo "Dostatečný" ;;
5) echo "Nedostatečný" ;;
*) echo "Neplatná známka" ;;
esac

Příkazem read tedy načteme právě jeden znak (read -n 1) z klávesnice a uložíme ho do proměnné znamka. Case potom na základě její hodnoty (case $znamka in) vypíše příslušný text. Nabývá-li hodnot 1 až 5, zobrazí se slovní význam dané známky. Jakýkoli jiný znak (zařizuje *) je označen za neplatnou známku. A nakonec nesmíme zapomenout esac.



Porovnávat můžeme i řetězce delší než jeden znak. Pokud chceme dát do jedné podmínky více hodnot, oddělujeme je svislou čarou (znak |). Lze využívat také jiných zástupných znaků než hvězdička. Jednoduchým je otazník, který nahrazuje jakýkoli jeden znak, podobně jako ve jménech souborů.

Zajímavé jsou hranaté závorky, do kterých lze přímo vypsat přesný seznam znaků, které má závorka nahrazovat. Tak např. [aeiouy] znamená jakákoli malá krátká samohláska. V hranatých závorkách ale můžeme použít i rozsahy ve smyslu od-do. Kupř. [0-9] značí všechny číslice, [a-z] potom všechna malá písmena. Zde ovšem pozor. V závislosti na nastavení jazyka ve vašem systému (echo $LANG) bude tento rozsah zahrnovat i znaky s diakritikou. Pokud tam chcete mít opravdu všechny, měl by zápis mít podobu [a-ž]. Pojďme si ukázat krátký skriptík na určování osoby osobního zájmena.

#!/bin/bash
echo "Určení osoby zájmena"
echo -n "Zadejte osobní zájmeno: "
read zajmeno
case $zajmeno in
já|my) echo "1. os." ;;
[vt]y) echo "2. os." ;;
on|on[aioy]) echo "3. os." ;;
*) echo "Chyba" ;;
esac

Ve třetí osobě se nám mísí použití svislé čáry a hranatých závorek. Věřím, že se vám použití těchto znaků v případě rozhodovacích podmínek case nebude plést s jejich použitím jakožto nepojmenované roury (viz 6. díl) a testu (viz 10. díl). Zápis on|on[aioy] čte Bash jako on nebo ona nebo oni nebo ono nebo ony.

Závěr

Takže z velkých konstrukcí Bashe už známe for, if, while, until a case. Zbývá tedy jen select a na ten se podíváme příště.

Nahoru

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

OpenRadioss: Simulace dynamických dějů nyní jako open-source

OpenRadiossNa podzim loňského roku Altair překvapil odbornou veřejnost z řad výpočtářů a vývojových inženýrů představením řešiče OpenRadioss. Jak už název napovídá, Open­Radi­oss je open-source verzí explicitní­ho solveru Altair Radioss, CAE nástroje pro simulace rychlých dějů, jakými jsou tolik populární virtuální testy nárazů vozidel, včetně vyhodnocení pasivní bezpečnosti, zkoušky odolnosti leteckých konstrukcí, pádové zkoušky elektronických zařízení a podobně.

Pokračování ...



Public Relations

PATRON-IT staví svůj monitorovací systém na technologii N-able

Společnost PATRON-IT je jednou z nejres-pektovanějších českých společností, které se specializují na IT bezpečnost. Její hlavní činností jsou dodávky SaaS (Security as a Service) služeb s garancí bezpečnosti a obrany proti útokům.

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 »