Ří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.

Syntaxe

until 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
Seznam však není povinnou položkou konstrukce cyklu for. Pokud není seznam uveden, shell automaticky uvažuje argumenty, které byly předány skriptu, tedy seznam hodnot, který je uložen v proměnné $@.

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