Menu

While cyklus

while blok příkazů 1; do
    blok příkazů 2
done

While bude provádět blok příkazů 2, dokud je návratová hodnota bloku příkazů 1 rovna 0. Pokud se v bloku příkazů 1 nachází více příkazů oddělených středníkem, zajímá jej jenom poslední návratová hodnota. Obvykle bude oním příkazem příkaz test:

i=0
while [ $i -le 42 ]; do
    echo $i
    i=$((i+1))
done

Příkaz read

Příkaza read umí načítat text ze standardního vstupu a ukládat jej do proměnných. Jeho syntaxe je prostě read x y z ..., kde x y z jsou jména proměnných. read vždy načte celý řádek a do zadaných proměnných načte postupně obsah prvního pole, druhého pole, … až do poslední proměnné načte celý zbytek řádku (včetně oddělovačů).

Čím jsou oddělena pole? Jedním ze znaků uložených v proměnné $IFS. Její defaultní hodnota je  \t\n (tedy mezera, tabulátor a nový řádek). Její hodnotu můžeme změnit, ale musíme to udělat opatrně – tak, abychom ovlivnili pouze příkaz read a žádný jiný. To nám umožní přiřazení do proměnné bezprostředně předcházející volání příkazu – IFS=: read x y z.

Čtení ze souboru

Čtení ze souboru není žádná magie, stačí nám přesměrovat soubor na standardní vstup příkazu read: read x y < soubor.txt. Pokud ale chceme vytvořit while cyklus, který přečte všechny řádky souboru, musíme si pomoci jinak:

while IFS=: read x _ y _; do
    printf "%s -- %s\n" "$x" "$y"
done < /etc/passwd