ŘÍDÍCÍ STRUKTURY - PODMÍNKY Pokusíme se rozvětvit sktipt v Bashi
ŘÍDÍCÍ STRUKTURY - PODMÍNKY V této lekci budeme probírat podmínkové, tj., které nám pomohou rozvětvit skript a provádět určité pouze při splnění určité podmínky. Patří sem: if.then for.in while until case select
if.then syntaxe: if podmínka fi then Vývojový diagram if podmínka False True then fi
Zadání příkladu Napište skript, který z příkazové řádky načte dvě slova a porovná, zda jsou či nejsou stejná Pozn.: V příkladu použijeme příkaz test, který testuje splnění či nesplnění podmínky a read, který načítá obsah proměnné z promptu. Pozn.: Uvozovky kolem $slovo1 jsou důležité pro případ, že by zadané slovo obsahovalo mezeru či zvláštní znak. Všimněte si, že se nedovíme nic v případě, že slova nesou stejná. Naštěstí má podmínka if then variantu if.then.else
if.then.else syntaxe: if podmínka then else fi Vývojový diagram
Zadání příkladu Rozšiřte předchozí skript o výstup pro případ, že se slova neshodují. Pozn.: Příkaz test lze nahradit hranatými závorkami. Závorky musí být odděleny od testované podmínky mezerou.
Vnořená podmínka if.then.elif syntaxe: if podmínka fi then elif podmínka else then Vývojový diagram True if podmínka False then True elif podmínka False then else fi
Zadání příkladu Napište skript, který porovná shodu tří slov zadaných z příkazové řádky. Pozn.: Pro příkaz test či hranaté závorky budeme potřebovat logický operátor AND, syntaxi příkazu test si přečteme v man test. Zjistíme, že AND se zapisuje jako a. Pozor, kolem logických operátorů musí být mezery, to platí i pro rovnost =.
Domácí úkol Napište skript, který po zadání jména a hesla (2 x pro ověření správnosti) přidá uživatele do systému Řešení:
for in jednoduchý cyklus syntaxe: for index-seznamu in seznam-argumentů do done Vývojový diagram
Zadání příkladu Napište skript, který ze seznamu argumentů načte pět jmen a vypíše je v příkazové řádce. Pozn.: Příkaz sleep už známe z minulých lekcí.
Varianty příkazu for Při této variantě budeme zadávat argumenty z příkazové řádky. Příklad spuštění skriptu s cyklem for s argumenty:./skript.sh arg1 arg2 arg3 syntaxe: for index-seznamu do done Obdoba předchozího příkladu:
Domácí úkol Napište skript, který ze seznamu jmen vytvoří v systému odpovídající uživatele. Řešení:
while další cyklus Dokud je splněna podmínka, tj. dokud test-příkaz vrací hodnou True, budou se vykonávat v sekci do syntaxe: while test-příkaz do done Vývojový diagram
Zadání příkladu Napište skript, který pomocí cyklu while, vypíše čísla od 0 do 9. Pozn.: Pro vypracování příkladu budeme potřebovat možnost pracovat s aritmetickými operátory. V lekci, která bude následovat po ukončení lekcí o řídících strukturách si aritmetiku v Bashi probereme pořádně. teď se omezíme jen na následující: Aritmetický výraz má v Bashi dvě možnosti zápisu. $((výraz)) nebo $[výraz]. Celý takovýto zápis se vyčíslí a má stejný efekt, jako bychom napsali přímo výsledek výrazu. Zápis $((2+1)) je tedy ekvivalentní zápisu 3. Zápis ((cislo +=1)) zvýší hodnotu proměnné o 1.
until další cyklus Dokud není splněna podmínka, tj. dokud test-příkaz vrací hodnou False, budou se vykonávat v sekci do syntaxe: until test-příkaz do done Vývojový diagram
Zadání příkladu Napište skript, pomocí kterého bude váš spolužák hádat křestní jméno někoho ze skupiny. Skript na závěr vypíše: Uhodl jsi na x-tý pokus!
A ještě jedna rada na závěr Cyklus while lze s výhodou využít i při načítání obsahu textového souboru po řádcích. syntaxe: while read proměnná do done < jmeno_souboru Následující skript načítá řádky souboru soubor.txt a vypisuje je do příkazového řádku.
Domácí úkol Napište skript, který načte jména uživatelů ze souboru a vytvoří pro ně účty, jako heslo použijte jmeno007, např. uživatel karel bude mít heslo karel007. Řešení:
case řídící struktura case je rozhodovací struktura s více možnostmi syntaxe: case test-řetězec in možnost-1) -1 ;; možnost-2) -2 ;; možnost-3) -3 ;; esac
case Vývojový diagram
Zadání příkladu Napište skript, který vyhodnotí zda jste zapsali A, B nebo C.
select řídící struktura umožňuje výběr obsahu proměnné ze zobrazené nabídky a poté vykonání příkazů s touto proměnnou syntaxe: select proměnná [in arg ] do done Příklad Následující příklad ukazuje, jak lze příkaz select využít. PS3 je systémová výzva, kterou používá struktura select pro vypsání zprávy uživateli. Vestavěný příkaz break lze použít i v jiných řídících strukturách. Ukončuje běh dané struktury.