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 done

A 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 ciklus

A while és az until ciklusok egymáshoz hasonló formája a következő:

while command_list1 do command_list2 done

until command_list1 do command_list2 done

A 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.

 

Tartalomjegyzék