Smyčky jsou jedním ze základních pojmů programovacích jazyků. Smyčky jsou užitečné, když chcete spustit sérii příkazů několikrát, dokud není splněna určitá podmínka.
Ve skriptovacích jazycích, jako je Bash, jsou smyčky užitečné pro automatizaci opakujících se úloh. Ve skriptování Bash existují tři základní konstrukce smyčky, for
smyčka, while
smyčka a until
smyčka.
Tento tutoriál pokrývá základy while
smyčky v Bash. Také vám ukážeme, jak používat break
a continue
příkazy ke změně toku smyčky.
Bash while
Smyčka #
while
smyčka se používá k provedení dané sady příkazů neznámého počtu opakování, dokud se daná podmínka vyhodnotí jako pravdivá.
Bash while
smyčka má následující tvar:
while [CONDITION]
do
[COMMANDS]
done
while
příkaz začíná while
klíčové slovo, za nímž následuje podmíněný výraz.
Podmínka je vyhodnocena před provedením příkazů. Pokud se podmínka vyhodnotí jako pravdivá, příkazy se provedou. V opačném případě, pokud se podmínka vyhodnotí jako nepravda, smyčka se ukončí a řízení programu bude předáno příkazu, který následuje.
V níže uvedeném příkladu je v každé iteraci aktuální hodnota proměnné i
se vytiskne a zvýší se o jednu.
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
Tue smyčka se opakuje tak dlouho, dokud i
je menší nebo roven dvěma. Vytvoří následující výstup:
Number: 0
Number: 1
Number: 2
Nekonečné while
Smyčka #
Nekonečná smyčka je smyčka, která se neomezeně opakuje a nikdy nekončí. Pokud se podmínka vždy vyhodnotí jako pravdivá, dostanete nekonečnou smyčku.
V následujícím příkladu používáme vestavěný příkaz :
vytvořit nekonečnou smyčku. :
vždy vrátí true. Můžete také použít true
vestavěný nebo jakýkoli jiný příkaz, který vždy vrátí hodnotu true.
while :
do
echo "Press <CTRL+C> to exit."
sleep 1
done
while
smyčka výše poběží neomezeně dlouho. Smyčku můžete ukončit stisknutím CTRL+C
.
Zde je jednořádkový ekvivalent:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
Přečíst soubor řádek po řádku #
Jedno z nejběžnějších použití while
smyčka je číst soubor, datový tok nebo proměnnou řádek po řádku.
Zde je příklad, který zní /etc/passwd
soubor řádek po řádku a vytiskne každý řádek:
file=/etc/passwd
while read -r line; do
echo $line
done < "$file"
Místo ovládání while
smyčky s podmínkou, používáme přesměrování vstupu (< "$file"
) předat soubor do read
příkaz, který řídí smyčku. while
smyčka bude probíhat, dokud nebude přečten poslední řádek.
Při čtení souboru řádek po řádku vždy použijte read
pomocí -r
možnost zabránit zpětnému lomítku, aby fungoval jako znak escape.
Ve výchozím nastavení read
příkaz ořízne úvodní/koncové mezery (mezery a tabulátory). Použijte IFS=
možnost před read
jak tomuto chování zabránit:
file=/etc/passwd
while IFS= read -r line; do
echo $line
done < "$file"
break
a continue
Výroky #
break
a continue
příkazy lze použít k řízení provádění cyklu while.
break
Prohlášení #
break
příkaz ukončí aktuální smyčku a předá řízení programu příkazu, který následuje po ukončené smyčce. Obvykle se používá k ukončení smyčky, když je splněna určitá podmínka.
V následujícím příkladu bude provádění smyčky přerušeno, jakmile bude aktuální iterovaná položka rovna 2
.
i=0
while [ $i -lt 5 ]
do
echo "Number: $i"
((i++))
if [[ "$i" == '2' ]]; then
break
fi
done
echo 'All Done!'
Number: 0
Number: 1
All Done!
continue
Prohlášení #
continue
příkaz ukončí aktuální iteraci smyčky a předá řízení programu další iteraci smyčky.
V následujícím níže platí, že jakmile je aktuální iterovaná položka rovna 2
continue
příkaz způsobí, že se provedení vrátí na začátek cyklu a bude pokračovat další iterací.
i=0
while [ $i -lt 5 ]
do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!
Závěr č.
while
loop opakovaně provádí danou sadu příkazů, dokud je podmínka pravdivá.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.