KONSTRUKECJE WARUNKOWE

Transkrypt

KONSTRUKECJE WARUNKOWE
„UNIX – programowanie w shellu” (2)
na podstawie: Arthur L.J., Burns T.1998
KONSTRUKCJE WARUNKOWE
IF-THEN-ELSE – podejmowanie decyzji dwukierunkowych i decyzji zagłębionych
Uwaga: część else jest opcjonalna.
if [ warunek ]
if [ warunek ]
then
then
lista poleceń
lista poleceń
fi
else
lista poleceń
fi
Przykład:
if [ -r plik_xyz ]
# jeżeli plik_xyz istnieje
then
cat plik_xyz
# to otwórz plik_xyz
else
cat > plik_xyz
# lub utwórz pusty plik_xyz
fi
Przykłady warunków:
if [ -d nazwa ]
# jeżeli nazwa jest katalogiem
if [ -f nazwa ]
# jeżeli nazwa jest plikiem
if [ -t 0 ]
# jeże li standardowym wyjściem jest terminal
if [ ”$PATH” ]
# jeżeli parametr/zmienna ma przypisaną wartość
Podstawowe warunki testujące
Warunek
Odpowiedź
-r plik
Prawda, jeżeli plik istnieje i ma prawa do czytania
-w plik
Prawda, jeżeli plik istnieje i ma prawa do pisania
-x plik
Prawda, jeżeli plik istnieje i ma prawa do wykonywania
1
„UNIX – programowanie w shellu” (2)
na podstawie: Arthur L.J., Burns T.1998
-f plik
Prawda, jeżeli plik istnieje i jest zwykłym plikiem
-d plik
Prawda, jeżeli plik istnieje i jest katalogiem
-p plik
Prawda, jeżeli plik istnieje i jest nazwany potokiem (fifo)
-s plik
Prawda, jeżeli plik istnieje i ma rozmiar większy od zera
-z s1
Prawda, jeżeli długość napisu s1 wynosi zero
-n s1
Prawda, jeżeli długość napisu s1 jest różna od zera
s1 = s2
Prawda, jeżeli napisy s1 i s2 są identyczne
s1 != s2
Prawda, jeżeli napisy s1 i s2 nie są identyczne
s1
Prawda, jeżeli napis s1 nie jest pusty
n1 –eq n2
Prawda, jeżeli liczby n1 i n2 są sobie równe (ang. equal)
-ne
nie równe (ang. not equal)
-gt
większa niż (ang. greater than)
-ge
większa niż lub równa (ang. greater than or equal to)
-lt
mniejsza niż (ang. less than)
-le
mniejsza niż lub równa (ang. less than or equal to)
Wykorzystanie operatora elif pozwala wybierać pomiędzy kilkoma możliwościami. Pierwsza
jest określona za pomocą struktury if. Następne możliwości występują po elif. Ostatnia
możliwość oznaczana jest przez else.
Przykład:
if [ -d ${zmienna} ]
then
działania na katalogu ${zmienna}
elif [ -f ${zmienna} ]
then
działania na pliku ${zmienna}
else
echo ”error”
fi
2
„UNIX – programowanie w shellu” (2)
na podstawie: Arthur L.J., Burns T.1998
CASE – sprawdzanie, czy zmienna przyjmuje jedną z wielu wartości.
case dopasowywane_wyrażenie_tekstowe in
[dopasowywany_wzorzec [ | dopasowywany_wzorzec ] ... )
lista_poleceń_do_wykonania
;;
esac
Przykłady 1 i 2:
MIESIAC=`date + ‘%m’`
case ${MIESIAC} in
case $MIESIAC in
01 | Jan | January)
01)
./raport01
./raport01
;;
;;
02 | Feb | February
02)
./raport02
./raport02
;;
;;
…
…
esac
12)
./raport12
;;
*)
echo “niewłaściwa data”
esac
3
„UNIX – programowanie w shellu” (2)
na podstawie: Arthur L.J., Burns T.1998
Przykład 3:
case $# in
# $# liczba parametrów wywołania
0)
echo “Brak parametrów wywołania. Składnia: $0 –s –w”
;;
2)
par1=$1
par2=$2
;;
*)
echo “Składnia: $0 –s –w”
;;
esac
KONSTRUKCJE ITERACYJNE
FOR – powtarzanie sekwencji poleceń dla zmieniającej się wartości zmiennej określonej w
wierszu polecenia for.
for nazwa_zmiennej in lista_wartości
do
polecenia dla zmiennej $nazwa_zmiennej
done
Przykład:
for i in `ls *.old`
do
rm -f $i
done
4
„UNIX – programowanie w shellu” (2)
na podstawie: Arthur L.J., Burns T.1998
WHILE – powtarzanie czynności w pętli
while lista_poleceń
do
czynności
done
Przykład 1:
MIESIAC=1
while [ ${MIESIAC} –le 12 ]
do
przetwarzaj ${MIESIAC}
MIESIAC=`expr $MIESIAC + 1`
done
Przykłady 2 i 3:
while [ 1 ]
while [ 1 ]
do
do
wykonuj polecenia
done
if [ warunek_zakończenia ]
then
break
else
wykonuj polecenia
fi
done
5
„UNIX – programowanie w shellu” (2)
na podstawie: Arthur L.J., Burns T.1998
UNTIL – polecenia wykonywane są co najmniej raz i dopiero wtedy sprawdzany jest
warunek zakończenia
until [ warunek_zakończenia ]
do
przetwarzanie
done
Przykład:
until [ ”`who | grep iksinski`” ]
do
mail iksinski<<-message
Prosze o kontakt z administratorem. Tel. 123
message
done
6