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_list1then
command_list2 elif-partfi
ahol elif-part a következők valamelyike lehet:
elif
command_listthen
command_list elif-partvagy
else
command_listAz 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 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 esacahol 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.