Vzhledem k tomu, že BASH je jazyk příkazového řádku, získáme poměrně bohaté zkušenosti s programováním k provádění úkolů v terminálu. Můžeme použít smyčky a podmíněné příkazy ve skriptech BASH k provádění některých opakujících se a záludných problémů jednoduchým programovým způsobem. V tomto článku se zaměříme na pro smyčku ve skriptech BASH.
V závislosti na případu použití a problému, který se snaží automatizovat, existuje několik způsobů, jak používat smyčky.
- Jednoduchá smyčka For
- Smyčka for založená na rozsahu
- Iterace pole pro smyčky
- C-styl pro smyčky
- Nekonečná smyčka for
Jednoduchá smyčka For
Pro provedení cyklu for můžeme napsat následující syntaxi:
#!/bin/bash for n in a b c; do echo $n done>
- V první iteraci,
n>převezme hodnotu a a skript vypíše a. - Ve druhé iteraci,
n>převezme hodnotu b a skript vypíše b. - Ve třetí iteraci,
n>převezme hodnotu c a skript vypíše c.

Výše uvedený příkaz bude iterovat přes zadané prvky po v klíčové slovo jeden po druhém. Prvky mohou být čísla, řetězce nebo jiné formy dat.
Smyčka for založená na rozsahu
Můžeme použít rozsahově založené pro smyčky. V tomto typu smyčky můžeme zadat číslo, které se má spustit, zastavit a zvýšit při každé iteraci (volitelné) v příkazu. Existují dva způsoby, jak to udělat, tj. uvedením hodnoty přírůstku/snižování a ve výchozím nastavení zvýšením o jednu. Syntaxe vypadá takto:
#!/bin/bash for n in {1..5}; do echo $n done> 
Ve výše uvedeném kódu používáme {} k určení rozsahu čísel. Uvnitř složených závorek určíme počáteční bod následovaný dvěma tečkami a koncovým bodem. Ve výchozím nastavení se zvýší o jednu. Vytiskneme tedy 5 čísel od 1 do 5 včetně.
#!/bin/bash for n in {1..5..2}; do echo $n done> 
Zde můžeme vidět, že smyčka se zvýšila o 2 jednotky, jak je uvedeno ve složených závorkách. Díky tomu je práce s čísly velmi snadná a pohodlná. To lze také použít s abecedními znaky.
POZNÁMKA: Nemůžeme použít proměnné uvnitř složených závorek, takže budeme muset hodnoty zakódovat napevno. Chcete-li použít proměnné, v několika následujících částech uvidíme tradiční smyčky for ve stylu C.
Iterace pole pro smyčky
Přes pole můžeme pohodlně iterovat v bash pomocí for smyček se specifickou syntaxí. Pro přístup ke všem prvkům v poli můžeme použít speciální proměnné v BASH, tj. @. Podívejme se na kód:
#!/bin/bash s=('football' 'cricket' 'hockey') for n in ${s[@]}; do echo $n done> 
Můžeme iterovat prvky pole pomocí operátoru @, který získá všechny prvky v poli. Pomocí cyklu for je tedy iterujeme jeden po druhém. Použijeme proměnnou ${název_proměnné[@]}, ve které složené závorky zde rozšiřují hodnotu proměnné s, která je polem řetězců. Pomocí operátoru [@] přistupujeme ke všem prvkům a tím je iterujeme v cyklu for. Tady, n je tedy iterátor, můžeme hodnotu vytisknout nebo na ní provést požadované zpracování.
C-styl pro smyčky
Jak bylo řečeno dříve, potřebujeme použít proměnné uvnitř cyklů for k iteraci přes řadu prvků. A tak smyčky for ve stylu C hrají velmi důležitou roli. Podívejme se, jak je používáme.
#!/bin/bash n=7 for (( i=1 ; i<=$n ; i++ )); do echo $i done>

Jak vidíme, můžeme dynamicky používat hodnotu rozsahu koncových podmínek. Pamatujte, že mezery mezi dvojitými složenými závorkami mohou být záměrné a jsou součástí syntaxe. Cykly for ve stylu C jsou smyčky, které mají 3 části, inicializační iterátor, inkrementátor/dekrement a koncovou podmínku.
Ve výše uvedené syntaxi jsme inicializovali iterátor/počítač smyčky na 1, což může být cokoliv podle výběru. Druhá část je koncová podmínka, zde jsme použili proměnnou n který je inicializován před smyčkou for, a proto používáme jednoduchý $ operátor k získání hodnoty proměnné. Nakonec máme inkrementor/dekrement, který změní iterátor/počítač na hodnotu, která může být jakákoli, ale v příkladu jsme použili unární operátor (++) zvýšit hodnotu o jednu, která je ekvivalentní i=i+1 . Můžeme tedy použít výroky jako i+=2, i–,++i, a tak dále a tak dále.
Nekonečná smyčka for
Nepoužíváme to často, ale někdy je užitečné, aby některé věci fungovaly. Syntaxe je poměrně snadná a podobná cyklům for ve stylu C.
#!/bin/bash n=4 for (( ; ; )); do if [ $n -eq 9 ];then break fi echo $n ((n=n+1)) done>
Smyčka začíná sn>nastavte na 4. Zvyšuje sen>o 1 při každé iteraci a vypíše hodnotun>až don>se rovná 9. Kdyn>dosáhne 9,break>se provede příkaz a smyčka se ukončí. Po vytištění čísel 4 až 8 se skript zastaví.

Jak vidíme, cyklus „for“ nemá žádné podmínky a toto se opakuje navždy, ale máme příkaz podmínky, který kontroluje, zda to netrvá navždy. Příkaz break používáme uvnitř příkazu if, abychom se dostali ze smyčky a zastavili iteraci s iterátorem. Použili jsme inkrementor ke zvýšení proměnné ve smyčce, jinak je smyčka nekonečná. Samozřejmě potřebujeme nějakou logiku, abychom se dostali ze smyčky, a proto musíme použít podmíněný příkaz if.