


Struktura while je struktura cyklu. V podstatě vykonává blok příkazů tak dlouho, dokud je splněna podmínka uvedena za slovem while.
Příklad struktury while je zde:
#!/bin/bash
while true; do
echo "Press Ctrl-C to quit."
done
Příkaz true je program, který vždy vrací hodnotu true (pravda). Náš skript tedy bude neustále opakovat vypisování hlášky jak ukončit program a to až do té doby než ho uměle přerušíme (Ctrl-C). Způsob volání true je však poněkud pomalý, protože systém musí vždy spouštět program true. Existuje rychlejší varianta jak docílit toho samého příkladu jak před tím a to použítím dvojtečky místo true:
#!/bin/bash
while :; do
echo "Press Ctrl-C to quit."
done
Dvojtečka je totiž interní příkaz interpretru bash. Tento příklad je však poněkud nepraktický, tak pojđme na další už více užitečný.
V následujícím příkladu použijeme proměnnou x, která bude při každém průchodu cyklu zvyšovat svojí hodnotu a to až do té doby než dosáhne hodnoty 10.
#!/bin/bash
x=0; # inicializuje hodnotu x na 0
while [ "$x" -le 10 ]; do
echo "Aktuální hodnota x: $x"
# zvýšení hodnoty x o 1
x=$(expr $x + 1)
sleep 1
done
Jak vidíte, používáme příkaz test (hranaté závorky), abychom zjistili, jestli hodnota proměnné x je menší nebo rovno 10. Je-li menší nebo rovno 10, test je vyhodnoceno jako true a blok příkazů za slovem do se může provést. Je-li však podmínka vyhodnocena jako false, pokračuje program v běhu za slovem done.
Následující tabulka shrnuje další možnosti příkazu test.
| Možnosti příkazu test | |
|---|---|
| Pro čísla: | |
| x -eq y | Testuje, jestli x=y |
| x -ne y | Testuje, jestli x!=y (nerovná se) |
| x -qt y | Testjue, jestli x>y |
| x -lt y | Testuje, jestli x |
| Pro řetězce: | |
| x = y | Testuje, jsou-li řetězce shodné |
| x != y | Testuje, jsou-li řetězce rozdílné |
| -n x | Vrátí true, není-li řetězec prázdný |
| -z x | Vrátí true, je-li řetězec prázdný |
Věřím, že nebude těžké porozumět i dalšímu příkazu ve skriptu a to je expr. Tento příkaz ve skriptu přičte k proměnné x hodnotu 1 a vrátí to do x. Ale co znamená $(...)? Tato konstrukce zařídí, že hodnota výsledeku výrazu v závorkách se zapíše jako hodnota do výrazu, který tuto konstrukci obsahuje. Je tedy možné tímto způsobem například zjistit pod jakým jménem jsme přihlášeni do systému. Příklad:
#!/bin/bash
x=$(whoami)
echo "Já jsem $x."
Samozřejmě lze také tímto způsobem dostat hodnotu vrácenou příkazem whoami přímo do řetězce. A to takto:
#!/bin/bash
echo "Já jsem $(whoami)."
Můžete se rozhodnout, který způsob je pro vás lepší. Konstrukce $(...) nám tedy dává opět další prostředek jak spustit příkaz a ještě použít hodnotu, kterou příkaz vrátí.
