If Else

Sprawdza czy warunek jest prawdziwy, jeśli tak to wykonane zostanie polecenie lub polecenia znajdujące się po słowie kluczowym then. Instrukcja kończy się słowem fi.

Składnia

if <warunek> ; then
    polecenia
else
    polecania
fi

Składnia

if <warunek> ; then
    polecenie
fi

Składnia

if <warunek> ; then
    polecenie
elif <warunek> ; then
    polecenie_2
else
    polecenie_3
fi

Uwaga:

Część else jest opcjonalna, jeśli warunek w instrukcji if przyjmuje wartość false instrukcje będące wewnątrz zostaną pominięte.

Przykład

#!/bin/bash
if [ -e ~/.bashrc ] ; then
  echo "Masz plik .bashrc"
fi

Najpierw sprawdzany jest warunek: czy istnieje w twoim katalogu domowym plik .bashrc, zapis ~/ oznacza to samo co /home/twój_login lub $HOME. Jeśli sprawdzany warunek jest prawdziwy to wyświetlony zostanie napis Masz plik .bashrc. W przeciwnym wypadku nic się nie stanie.

W sytuacji gdy test warunku zakończy się wynikiem negatywnym można wykonać inny zestaw poleceń, które umiesczamy po słowie kluczowym else:

Przykład

#!/bin/bash
if [ -e ~/.bashrc ]
then
  echo "Masz plik.bashrc"
else
  echo "Nie masz pliku .bashrc"
fi

Jeśli warunek jest fałszywy skrypt poinformuje Cię o tym.

Można też testować dowolną ilość warunków, jeśli pierwszy warunek nie będzie prawdziwy, sprawdzony zostanie następny, kolejne testy warunków umieszczamy po słowie kluczowym elif.

Przykład

#!/bin/bash
if [ -x /opt/kde/bin/startkde ] ; then
   echo "Masz KDE w katalogu /opt"
elif [ -x /usr/bin/startkde ] ; then
  echo "Masz KDE w katalogu /usr"
elif [ -x /usr/local/bin/startkde ] ; then
  echo "Masz KDE w katalogu /usr/local"
else
  echo "Nie wiem gdzie masz KDE"
fi

Ten skrypt sprawdza gdzie jest zainstalowane KDE, sprawdzane są trzy warunki, najpierw czy plik wykonywalny startkde znajduje się w katalogu /opt/kde/bin jeśli go tam nie ma, szukany jest w /usr/bin, gdy i tu nie występuje sprawdzany jest katalog /usr/local/bin.

Łączenie warunków i poleceń w listy

Lista AND

Składnia

        instrukcja1 && instrukcja2 && instrukcja3 && instrukcja4 ...

Wykonywane są instrukcje po kolei aż do momentu określenia wyniku całości wyrażenia, np. instrukcja1 zwróci FALSE, to instrukcja2 się już nie wykona - ponieważ całość wyrażen
ia przyjmie wartość FALSE (zobacz Algebrę Boola).
Aby otrzymać TRUE, wszystkie spośród instrukcji muszą zwrócić TRUE, w tym wypadku wszystkie one zostaną wykonane poprawnie (zwrócą 0).

Zamiast instrukcji może wystąpić dowolne wyrażenie, wtedy zamiast wykonywania instrukcji zostanie obliczona wartość tego wyrażenia.
Całość można traktować jako ciąg iloczynów logicznych przetwarzany od lewej do prawej, w którym instrukcje są wykonywane dopóki wartość wyrażenia nie jest określona.

Lista OR

Składnia

        instrukcja1 || instrukcja2 || instrukcja3 || instrukcja4 ...

Analogicznie jak w przypadku listy AND instrukcje są wykonywane do momentu określenia całości wyrażenia, tylko w tym przypadku jest odwrotnie, mianowicie jeśli dowolna z
instrukcji przyjmie wartość TRUE, to wartość wyrażenia będzie określona jako TRUE i dalsze instrukcje się nie wykonają.
Zwrócenie przez instrukcję FALSE powoduje dalsze przetwarzanie wyrażenia. Aby otrzymać FALSE, wszystkie instrukcje muszą zwrócić FALSE.

Wyrażenie można traktować jako ciąg sum logicznych. Można łączyć ze sobą listy AND i OR, by uzyskać bardziej skomplikowane warunki. Operatory && i || mają taki sam priorytet.

Uwaga: Całość wyrażenia jest wykonywana sekwencyjnie od lewej do prawej, jeśli chcemy to zmienić można użyć nawiasów zwykłych.

test
polecenie to służy sprawdzania warunków. (Uwaga! Nie można skryptom nadawać nazwy test! Nie będą działać!).

Składnia polecenia test

test wyrażenie1 operator wyrażenie2

lub może być zapisane w postaci nawiasów kwadratowych (które są de-facto aliasem do polecenia test):
[ wyrażenie1 operator wyrażenie2 ]

Uwaga

Między nawiasami a treścią warunku muszą być spacje, inaczej skrypt nie wykona się poprawnie.
Porównując dwa łancuchy znakowe oba muszą być w cudzysłowach!

Polecnie test zwraca wartość 0 (true) jeśli warunek jest spełniony i wartość 1 (false) jeśli warunek nie jest spełniony. A gdzie jest umieszczana ta wartość? W zmiennej specjalnej $?.

Uwaga

W innych językach programowania false oznaczane jest wartością równą 0, natomiast true wartością różną od zera.

Opcje dla polecnia test:

Operacje na systemie plików

-b
plik istnieje i jest blokowym plikiem specjalnym
-c
plik istnieje i jest plikiem znakowym
-d
katalog istnieje
-e
plik istnieje
-f
plik istnieje i jest plikiem zwykłym
-h
plik istnieje i jest linkiem symbolicznym
-r
plik można czytać
-w
plik można zapisywać
-x
plik można wykonywać
plik1 -nt plik2
plik1 jest nowszy od pliku2
plik1 -ot plik2
plik1 jest starszy od pliku2

Operacje arytmetyczne

-eq
równy (equal to)
-ne
różny (not equal to)
-lt
mniejszy niż (less than)
-le
mniejszy lub równy (less than or equal to)
-gt
większe niż (greather than)
-ge
większe lub równe (greather or equal to)

Operacje operujace na łańcuchach znakowych

=
równy
!=
różny
<
pierwszy tekst alfabetycznie przed drugim
>
pierwszy tekst alfabetycznie za drugim
-n
wyrażenie ma długość większą niż 0
-z
wyrażenie ma zerową długość [ $x = "" ]

Więcej przykładów można znaleźć w dokumentacji systemowej (man test, man bash).

Przykład:

#!/bin/sh
echo "Podaj login:"
read login

if [ "$login" != "kolorowy_mis" ]
then
       echo 'Dostep zabroniony, odejdz. '
else
       echo 'Witaj Kolorowy Misiu, jak mija Twoj dzien?'
fi

Skrypt przedstawiony powyżej zapyta użytkownika o imię i w zależności od opowiedzi wyświetli odpowiednie powitanie.
Uwaga

Pamiętaj, żeby zawsze otaczać zmienne znakiem cala (").W przeciwnym wypadku będzie powodował wadliwe działanie przy niektórych wartościach zmiennej (przykładowo dla pustej zmiennej, lub łancucha zawierającego w sobie spacje - odpowiada za to zmienna IFS ale nie tylko ;) ).

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License