Instrukcja 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ć.

Jeśli 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 skryptu.

Instrukcja case idealnie nadaje się do przetwarzania argumentów podanych w linii komend (oczywiście w połączeniu z jakąś pętla np while).

Ostrzeżenie

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

Składnia

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

Ostrzeżenie

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ś

Ostrzeżenie

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 dalszych sekcjach tego podręcznika.