Elágazások

Az if elágazási mechanizmus

Az alapvető elágazás szerkezet a UNIX shell-ben az if-szerkezet, amelyben, a más programnyelvekben szokott módon, egy feltétel teljesüléséhez van kötve, hogy mi legyen a soronkövetkező végrehajtandó utasítás. Az if-szerkezet a következőképpen néz ki:

if command_list1

then command_list2 elif-part

fi

ahol elif-part a következők valamelyike lehet:

elif command_list

then command_list elif-part

vagy

else command_list

Az if-ág akkor hajtódik végre, ha az if kulcsszó után megadott command_list1 logikai értéke igaz, azaz a command_list1 visszatérési értéke nulla. A command_list1 több parancsból is állhat (ezeket a már ismert pontosvesszővel, illetve a kerek zárójelekkel, vagy éppen a pipe révén csoportosíthatjuk). Több parancs esetén az utolsó parancs visszatérési kódja számít a command_list1 kiértékelésekor. Mint látható, az else-part el is maradhat, de több elágazási feltételt is tartalmazhat. Vigyázni kell arra, hogy a feltételeket a fentiek szerint tördeljük sorokba, vagy ha egy sorba írjuk őket, akkor pontosvesszővel válasszuk őket el egymástól, mert ebből ismeri fel, hogy az adott helyen kulcsszót kell keresnie, és nem az utolsó utasítás egy argumentumáról van szó.

(Ha elegánsabban akarjuk megoldani a kiíratást, s magát a dátumot nem akarjuk látni, átirányíthatjuk a grep kimenetét a "szemétkosárba", a /dev/null fájlba:

$ if date | grep Apr >/dev/null; then echo Tavasz van!; fi

Tavasz van!

$

(A /dev/null egy különleges fájl-jellegű periféria: ha erről olvasunk, mindig az EOF (fájl vége) karaktert kapjuk, ha pedig írunk rá, az eredmény sehol nem jelenik meg - épp ezért szokták "szemétkosárként" használni, a látni nem kívánt kimenet átirányítására.)

A case elágazási mechanizmus

A case utasítás a többszörös elágazások megvalósításának legkézenfekvőbb eszköze. Formája a következő:

case word in case-part esac

ahol case-part a következő lehet:

 

pattern) command_list;;

Az már természetes, hogy a command_list több, egymással akár kapcsolatban levő utasítás is lehet. Fontos viszont, hogy az utasítássort két darab kettőspont zárja.

A case szerkezet a következőképpen működik: a shell megkeresi azt az első pattern mintát, amelyik illeszkedik a word szó aktuális értékéhez, s végrehajtja azt a command-list parancsot vagy parancssorozatot, amelyik ehhez az illeszkedő mintához tartozik. A minta megadásakor az állománynév kifejtésénél tárgyalt metakarakterek használhatóak. Ha word aktuális értéke egyik mintára sem illeszkedik, akkor semelyik command_list sem hajtódik végre. Fontos hangsúlyozni, hogy az elsőnek talált illeszkedő mintához tartozó parancsokat hajtja végre a shell, ezért a speciálistól az egyre általánosabb minták felé haladva célszerű megadni a mintákat. A '|' karakter használatával több mintát is megadhatunk, ha ezek bármelyikére illeszkedik word, a parancság végrehajtódik.

 

Tartalomjegyzék