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