Řídicí konstrukce cyklů
Stránky: | E-learning VŠCHT Praha |
Kurz: | Linux, shell |
Kniha: | Řídicí konstrukce cyklů |
Vytiskl(a): | Nepřihlášený host |
Datum: | neděle, 7. července 2024, 03.18 |
1. Typy konstrukcí cyklů
Cyklem se rozumí opakované vykonání jednoho či více příkazů. Shell rozeznává celkem tři typy konstrukce cyklů
- while
- until
- for
1.1. Cyklus while
Popis
Cyklus while je podmíněný cyklus. Na začátku každé iterace se provádí vykonání všech příkazů uvedených za klíčovým slovem while a dochází k vyhodnocení exit statusu posledního z nich. Jestliže je splněna podmínka, že je exit status naposledy vykonaného příkazu roven nule, dojde k vykonání příkazů uvedených mezi klíčovými slovy do a done.
Za klíčovým slovem while může následovat libovolný typ příkazu shellu, ovšem aby konstrukce dávala konkrétní smysl, obvykle se používá některý z testů (test, [ ], [[ ]], (( ))),
který vyhodnocuje konkrétní podmínku.
Syntaxe
while příkaz; [příkaz; příkaz; ...]; do
příkaz
příkaz
. . .
done
Příklad
1.2. Cyklus until
Popis
Cyklus until je podmíněný cyklus. Na začátku každé iterace se provádí vykonání všech příkazů uvedených za klíčovým slovem until a dochází k vyhodnocení exit statusu posledního z nich. Jestliže je splněna podmínka, že je exit status naposledy vykonaného příkazu různý od nuly, dojde k vykonání příkazů uvedených mezi klíčovými slovy do a done.
Za klíčovým slovem until může následovat libovolný typ příkazu shellu, ovšem aby konstrukce dávala konkrétní smysl, obvykle se používá některý z testů (test, [ ], [[ ]], (( ))), který dokáže vyhodnocuje určitou podmínku.
Syntaxeuntil příkaz; [příkaz; příkaz; ...]; do
příkaz
příkaz
. . .
done
Příklad
1.3. Cyklus for
Popis
Původní cyklus for jako jediný není podmíněný, tedy před každou iterací nedochází k vyhodnocení žádné podmínky. Pracuje na principu procházení jednotlivých prvků seznamu, který mu předložíme. Postupně vkládá do proměnné s názvem prom hodnotu aktuálního prvku seznamu a vykoná příkazy uvedené mezi klíčovými slovy do a done. Cyklus se opakuje dokud neprojde všechny prvky seznamu. Cyklus má tedy tolik iterací, kolik je prvků seznamu.
Seznamem může být
- přímý výčet prvků
- výčet prvků daný proměnnou
- výčet cest konkrétního místa v systému daný expansí cesty
- výstup expanse příkazu
- pole
Syntaxe
for prom [in seznam]; do
příkaz
příkaz
. . .
done
Příklad
1.4. Cyklus for podle vzoru jazyka C
Popis
Kromě původní verze cyklu for rozeznává shell i modernější zápis, který kopíruje syntaxi z programovacího jazyka C.
Syntaxe
for (( inicializace; podmínka; obsluha proměnné )); do
příkaz
příkaz
. . .
done
Příklad
2. Kontrola nad cykly
Shell umožňuje do jisté míry kontrolovat a ovlivnit průběh cyklu. U všech typů konstrukcí cyklů lze využít dvou příkazů
- break
- continue
Funkce obou uvedených příkazů se ovšem většinou uplatní v případě více vnořených cyklů.
2.1. Příkaz break
Popis
V případě použití příkazu break bez argumentu uvnitř nějakého cyklu, dojde k přerušení vykonávání tohoto cyklu. Pokud je příkazu jako argument předáno celé číslo (n > 1), zastaví se vykonávání n-tého nadřazeného cyklu. Aktuální cyklus má implicitně nastaveno n = 1 a nemusí se uvádět.
Příklad
2.2. Příkaz continue
Popis
V případě použití příkazu continue bez argumentu uvnitř nějakého
cyklu, dojde k zastavení vykonávání všech následujících příkazů cyklu a následnému spuštění další iterace tohoto cyklu. Pokud je příkazu jako argument předáno celé číslo (n > 1), dojde ke stejnému jevu u n-tého
nadřazeného cyklu. Aktuální cyklus má implicitně nastaveno n = 1 a
nemusí se uvádět.
Příklad