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
.
Samo polecenie if
sprawdza tylko czy wynik polecenia jakie wstawiamy to true
(w bash to 0
) lub false
(w bash to wszystko różne 0
).
Za dokonania sprawdzenia warunków odpowiadają polecenia test lub polecenie [.
if <warunek> ; then
polecenia1
else
polecenia2
fi
|
if <warunek> ; then
polecenia1
fi
Podpowiedź Część |
Przykład użycia
#!/bin/bash
if [ -e ~/.bashrc ] ; then
echo "Masz plik .bashrc"
fi
Powyższy plik ma za zadanie sprawdzić, czy w katalogu uzytkownika znajduje się plik .bashrc
jeżeli tak ma wypisać tą informację.
- 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
.
#!/bin/bash
if [ -e ~/.bashrc ]
then
echo "Masz plik.bashrc"
else
echo "Nie masz pliku .bashrc"
fi
Gdy użytkownik nie będzie miał w katalogu pliku .bashrc
to skrypt wypisze komunikat Nie masz pliku .bashrc
.
Podpowiedź
Polecam zerknąć do opisu polecenia [ (nawias kwadratowy) gdzie jest więcej przykładów wykorzystania instrukcji if-else
.
W Bashu nie jesteśmy ograniczeni do testowania jednego warunku, język ten pozwala testować dowolną ilość warunków np.
- jeśli pierwszy warunek nie będzie prawdziwy, sprawdzony zostanie drugi,
- jeśli drugi warunek nie będzie prawdziwy, sprawdzony zostanie trzeci,
- jeśli trzeci warunek nie będzie prawdziwy, sprawdzony zostanie czwarty,
- itd.
Kolejne testy warunków umieszczamy po słowie kluczowym elif
jeżeli
wszystkie warunki elif
zostaną sprawdzone i żaden z nich nie będzie
prawdziwy skrypt wykona blok else
- zgodnie z przykładem poniżej.
if <warunek> ; then
polecenia
elif <warunek> ; then
polecenia_2
else
polecenia_3
fi
Przykład użycia
#!/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 środowisko graficzne 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 katalogu
/usr/bin
,- gdy i tam nie występuje sprawdzany jest katalog
/usr/local/bin
.- w przypadku kiedy wszystkie trzy sprawdzenia okazały sie błędne skrypt wypisze informację
Nie wiem gdzie masz KDE
Podpowiedź
Często do sprawdzania wielu wykluczających się warunków wykorzystuje się polecenie case, które jest trochę bardziej czytelne.
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żenia 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.
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
.
Podpowiedź
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.
Ostrzeżenie
Całość wyrażenia jest wykonywana sekwencyjnie od lewej do prawej, jeśli chcemy to zmienić można użyć nawiasów zwykłych.