Case

Pozwala na dokonanie wyboru spośród kilku wzorców. Najpierw sprawdzana jest wartość zmiennej po słowie kluczowym case i porównywana ze wszystkimi wariantami po kolei. Oczywiście musi być taka sama jak wzorzec do którego chcemy się odwołać. Jesli dopasowanie zakończy się sukcesem wykonane zostanie polecenie lub polecenia przypisane do danego wzorca. W przeciwnym wypadku użyte zostanie polecenie domyślne oznaczone symbolem gwiazdki: *) polecenie_domyślne. Co jest dobrym zabezpieczeniem na wypadek błędów popełnionych przez użytkownika naszego skrytpu. Instrukcja case idealnie nadaje się do przetwarzania argumentów podanych w linii komend (oczywiście w połączeniu z jakąś pętla np while).

Uwaga

W wielu przypadkach polecenie case może być zastąpione przez odpowiadające mu polecenie if-elif-else ;) opisane w dziale dotyczącym polecenia if.

Składnia

case <zmienna> in
  "wzorzec1") polecenie1 ;;
  "wzorzec2") polecenie2 ;;
  "wzorzec3") polecenie3 ;;
  *) polecenie_domyślne
esac

Uwaga

Bardzo ważne jest umieszczanie podwójnych średników po wykonaniu bloku odpowiadającemu wzorcowi, ich brak spowoduje złe działanie skryptu (najprawdopodobniej nie zostanie zgłoszone ostrzeżenie!!!).

Przykład

#!/bin/bash
echo "Podaj numer miesiąca"
read d
case "$d" in
  "1") echo 'Styczeń, zimno ... marzę o nartach' ;;
  "2") echo 'Luty, wakacje zimowe hurra!' ;;
  "3") echo 'Marzec, tylko do wiosny ...' ;;
  "4") echo 'Kwiecień, wiosna każdy to powie ...' ;;
  "5") echo 'Maj, "I wtedy przyszedł maj zamieszał w moim sercu ..." ' ;;
  "6") echo 'Czerwiec, no no lato tuż tuż' ;;
  "7") echo 'Lipiec, wakacje! :)' ;;
  "8") echo 'Sierpień, wakacje! :)' ;;
  "9") echo 'Wrzesień, hej ho, hej ho do szkoły by się szło :)' ;;
  "10") echo 'Październik, ah ta jesień ...' ;;
  "11") echo 'Listopad, szaro, buro i ponuro' ;;
  "12") echo 'Grudzień, święta, prezenty, sylwester' ;;
  *) echo "Nic nie wybrałeś"
esac

W skrypcie umieściliśmy numery miesiecy, dla każdego miesiąca jest przyporządkowane polecenie wyświetlające inny komunikat. Jeśli podamy 1 polecenie read czytajace dane ze standardowego wejścia przypisze zmiennej d wartość 1 i zostanie wykonany skok do wzorca "1", a na ekranie zostanie wydrukowany komunikat:

Styczeń, zimno … marzę o nartach

W przypadku wyboru liczby spoza zakresu nasz skrypt wybierze odpowiedź domyślną oznaczoną gwiazdką, a więc wypisze:

Nic nie wybrałeś

Uwaga

Dobrze jest użyć cudzysłowiów w miejscu wzorców zapobiega to przed złym interpretowaniem liczb i innych znaków.
Można również użyć znaków specjalnych * ? [] itp. są one opisane w którejś sekcji tego podręcznika, ale póki co nie wiem gdzie ;)

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