Ciklusok
A for ciklus
A for ciklusutasítás a következőképpen néz ki:
for
name in word_list do command-list doneA word_list egy karakterláncokból álló felsorolás. A felsorolt elemeket a szóköz általános mezőelválasztó tagolja.
A for ciklus végrehajtásakor a shell a name változónak sorra a word_list felsorolásban szereplő értékeket adja, s ezzel az értékkel hajtja végre a command_list parancssorozatot. Az alábbi példában ötször egymásután kiírjuk az időt, három másodperces időközönként, s megadjuk azt is, hogy hányadik kiíratás zajlik:
$ for i in 1 2 3 4 5; do echo $i; date; sleep 3; done
1
Wed Apr 17 20:58:30 MET 1991
2
Wed Apr 17 20:58:34 MET 1991
3
Wed Apr 17 20:58:37 MET 1991
4
Wed Apr 17 20:58:41 MET 1991
5
Wed Apr 17 20:58:44 MET 1991
$
Mint láttuk, a name ciklusváltozónak tetszőleges explicit értéket is megadhatunk, de lehet a word-list egy '*' is. Shellscript-ekben gyakori, hogy a for ciklus a pozicionális paramétereken "megy végig". Ennek figyelembevételével ha az in word_list rész hiányzik a for ciklus megadásakor, akkor a word_list értékét a shell automatikusan $*-nak értelmezi, s az ennek kifejtéséből adódóan a pozicionális változók értékeit helyettesíti be sorban a ciklusváltozóba.
A while és az until ciklusok egymáshoz hasonló formája a következő:
while
command_list1 do command_list2 doneuntil
command_list1 do command_list2 doneA while ciklusban a shell végrehajtja command_list1 parancssorozatot, s ha annak visszaadott értéke nulla, azaz command_list1 logikai értéke igaz, akkor végrehajtja command_list2-t; mindezt addig ismétli, amíg command_list1 logikai értéke nem lesz hamis. Az until ciklusban ugyanez történik, csak a feltétel kiértékelése fordított, amíg command_list1 logikai értéke hamis, addig hajtja végre a ciklust. Az alábbi parancsok végtelen ciklusban írják ki az időt (másodpercenként), az előre definiált, igaz logikai értékű true állandót használva:
$ while true; do date; sleep 1; done
Wed Apr 17 20:59:30 MET 1991
Wed Apr 17 20:57:31 MET 1991
Wed Apr 17 20:57:33 MET 1991
Wed Apr 17 20:57:34 MET 1991
...
$
A program futása az aktuális interrupt karakterrel szakítható meg.