Programok írása során sokszor kerülünk olyan helyzetbe, hogy két lehetőség közül kell választanunk. Ekkor használhatjuk fel az if utasítást.
if kifejezés then utasitás1 utasitás2 ... else utasitás1 utasitás2 ... fi
Az if utasítás a kifejezés eredményétől függően hajtja végre a megfelelő parancssorozatot. Ez a gyakorlatban azt jelenti, hogy ha a kifejezésben megadott parancs visszatérési értéke 0, akkor a then ág hajtódik végre, ellenkező esetben az else ág (ha létezik). Leggyakrabban a test parancsot használjuk a kifejezésben. Ennek a parancsnak a másik megjelenési formája a [, ami sokszor egy szimbólikus link a test programra. Ez a parancs sokféle művelet elvégzésére alkalmas, melyeket a következő táblázatban foglalunk össze.
Táblázat 10-3. A test parancs lehetőségei
| Kifejezés | Leirás |
|---|---|
| karakterlánc | Igaz, ha a karakterlánc nem üres. |
| karakterlánc1 = karakterlánc2 | Igaz, ha a két karakterlánc megegyezik. |
| karakterlánc1 != karakterlánc2 | Igaz, ha a karakterláncok különböznek. |
| -n karakterlánc | Igaz, ha a karakterlánc nem üres. |
| -z karakterlánc | Igaz, ha a karakterlánc üres. |
| kifejezés1 -eq kifejezés2 | Igaz, ha a két kifejezés aritmetikailag egyenlő. (pl. 4 egyenlő 4 -gyel ) |
| kifejezés1 -ne kifejezés2 | Igaz, ha a két kifejezés aritmetikailag különbözik. (pl. 4 nem egyenlő 3-mal. ) |
| kifejezés1 -gt kifejezés2 | Igaz, ha az első kifejezés nagyobb mint a második. |
| kifejezés1 -ge kifejezés2 | Igaz, ha az első kifejezés nagyobb a másodiknál, vagy egyenlőek. |
| kifejezés1 -lt kifejezés2 | Igaz, ha az első kifejezés kisebb mint a második. |
| kifejezés1 -le kifejezés2 | Igaz, ha az első kifejezés kisebb a másodiknál, vagy egyenlőek. |
| ! kifejezés | Negálja a kifejezést, vagyis igaz a visszatérési értéke, ha a kifejezés hamis. |
| -d fájl | Igaz, ha a fájl egy könyvtár |
| -e fájl | Igaz, ha a fájl létezik. |
| -f fájl | Igaz, ha a fájl normál állomány. |
| -g fájl | Igaz, ha a set-group-id (setgid) bit be van állítva a fájlon. |
| -r fájl | Igaz, ha a fájl olvasható. |
| -s fájl | Igaz, ha a fájl hossza nem nulla. |
| -u fájl | Igaz, ha a set-user-id bit be van állítva a fájlon. |
| -w fájl | Igaz, ha a fájl írható. |
| -x fájl | Igaz, ha a fájl futtatható. |
Mostanra az összes eddig látott példaprogram utasításait ismerjük. Nézzünk meg egy programot, ami összefoglalja eddigi tudásunkat.
#!/bin/sh echo "Reggel van?" read valasz if [ "$valasz" = "igen" ] then echo "Jo reggelt" elif [ "$valasz" = "nem" ] echo "Jo napot" else echo "$valasz nem ertelmezheto. Valasz: igen vagy nem!" exit 1 fi exit 0
#!/bin/sh echo "Reggel van?" read valaszA programot a szokásos módon kezdjük, majd megkérdezzük, hogy reggel van-e. Figyeljük meg, hogy a read utasításban nem $valasz-t hasznaltunk, hiszen nem egy változó tartalmára hivatkozunk, hanem egy változót deklarálunk, amelynek értékét a billentyűzetről olvassuk be.
if [ "$valasz" = "igen" ] thenMegnézzük, hogy a válasz igen-e.
Megjegyzés: Fontos, hogy a változóhivatkozásokat idézőjelek közé zárjuk, mivel ha valamilyen ok miatt nem jön létre a változó, akkor az értelmező úgy veszi, hogy semmit nem írtunk oda. Így idézőjelek nélkül hiányolni fogja a kifejezés első operandusát.
echo "Jo reggelt" elif [ "$valasz" = "nem" ] echo "Jo napot"Az elif utasítás lehetővé teszi, hogy a programozó egy if szerkezeten belül több feltételt vizsgáljon meg.
else echo "$valasz nem ertelmezheto. Valasz: igen vagy nem!" exit 1Ha nem megfelelő választ adunk meg, akkor a program hibaüzenet kiséretében az egyes hibakóddal kilép.
fi exit 0Ha minden rendben volt, akkor a nullás kóddal fejezzük be a programot.