BASH – Instrukcja case: Kompleksowy przewodnik
Programowanie

BASH – Instrukcja case: Kompleksowy przewodnik

BASH – Instrukcja case: Kompleksowy przewodnik

BASH (Bourne Again Shell) to wszechstronna powłoka wykorzystywana w systemach Linux i Unix, która pozwala na tworzenie skryptów automatyzujących różnorodne zadania. Jednym z kluczowych narzędzi w BASH jest instrukcja case, która ułatwia obsługę wielu warunków w prosty i czytelny sposób. W tym artykule omówimy, czym jest instrukcja case, jej składnię oraz pokażemy praktyczne przykłady zastosowań.


Czym jest instrukcja case?

Instrukcja case w BASH jest narzędziem, które umożliwia obsługę wielu warunków w bardziej przejrzysty sposób niż wielokrotne użycie instrukcji if...elif. Jest szczególnie przydatna, gdy mamy do czynienia z wieloma możliwymi wartościami jednej zmiennej.

BASH – Instrukcja case: Kompleksowy przewodnik
BASH – Instrukcja case: Kompleksowy przewodnik

Składnia instrukcji case

Podstawowa składnia instrukcji case wygląda następująco:

case zmienna in
    wzorzec1)
        # kod do wykonania, jeśli zmienna pasuje do wzorca1
        ;;
    wzorzec2)
        # kod do wykonania, jeśli zmienna pasuje do wzorca2
        ;;
    *)
        # kod do wykonania, jeśli żaden wzorzec nie pasuje (opcjonalne)
        ;;
esac

Kluczowe elementy:

  1. case – otwiera instrukcję warunkową.
  2. zmienna – zmienna, której wartość jest porównywana z wzorcami.
  3. wzorzec – wyrażenie, z którym jest porównywana wartość zmiennej.
  4. *) – opcjonalny wzorzec domyślny, wykonywany, gdy żadna wartość nie pasuje.
  5. ;; – oznacza koniec bloku kodu dla danego wzorca.
  6. esac – zamyka instrukcję case (odwrotność case).

Jak działa instrukcja case?

Instrukcja case porównuje wartość zmiennej z podanymi wzorcami w kolejności od góry. Jeśli wartość zmiennej pasuje do wzorca, wykonywany jest odpowiadający mu blok kodu. Po zakończeniu bloku kodu następuje wyjście z instrukcji case.


Przykłady zastosowań instrukcji case

1. Prosty przykład z wyborem

#!/bin/bash
echo "Wybierz opcję:"
echo "1. Informacje o systemie"
echo "2. Lista plików"
echo "3. Wyjście"
read -p "Twój wybór: " opcja

case $opcja in
    1)
        echo "Informacje o systemie:"
        uname -a
        ;;
    2)
        echo "Lista plików w bieżącym katalogu:"
        ls -l
        ;;
    3)
        echo "Do widzenia!"
        exit 0
        ;;
    *)
        echo "Nieznana opcja, spróbuj ponownie."
        ;;
esac

2. Obsługa argumentów skryptu

#!/bin/bash
case $1 in
    start)
        echo "Uruchamianie usługi..."
        ;;
    stop)
        echo "Zatrzymywanie usługi..."
        ;;
    restart)
        echo "Restartowanie usługi..."
        ;;
    *)
        echo "Użycie: $0 {start|stop|restart}"
        ;;
esac

3. Rozpoznawanie typów plików

#!/bin/bash
read -p "Podaj nazwę pliku: " plik

case $plik in
    *.txt)
        echo "To jest plik tekstowy."
        ;;
    *.jpg | *.png)
        echo "To jest plik graficzny."
        ;;
    *.sh)
        echo "To jest skrypt BASH."
        ;;
    *)
        echo "Nieznany typ pliku."
        ;;
esac

4. Użycie case w pętli

#!/bin/bash
while true; do
    echo "Co chcesz zrobić?"
    echo "1. Pokaż datę"
    echo "2. Pokaż użytkowników"
    echo "3. Wyjdź"
    read -p "Wybór: " opcja

    case $opcja in
        1)
            date
            ;;
        2)
            who
            ;;
        3)
            echo "Zamykanie programu."
            break
            ;;
        *)
            echo "Nieprawidłowy wybór, spróbuj ponownie."
            ;;
    esac
done

Użycie wyrażeń regularnych w case

Wzorce w instrukcji case obsługują podstawowe wyrażenia regularne. Możemy używać znaków specjalnych, takich jak:

  • * – pasuje do dowolnej liczby znaków.
  • ? – pasuje do jednego znaku.
  • [abc] – pasuje do jednego znaku z zestawu.
Czytaj  BASH - Zmienne specjalne: Przewodnik po najważniejszych zmiennych w BASH-u

Przykład:

#!/bin/bash
read -p "Podaj dzień tygodnia: " dzien

case $dzien in
    poniedziałek|wtorek|środa|czwartek|piątek)
        echo "To jest dzień roboczy."
        ;;
    sobota|niedziela)
        echo "To jest weekend."
        ;;
    *)
        echo "Nieznany dzień tygodnia."
        ;;
esac

Zalety stosowania instrukcji case

  1. Przejrzystość kodu – w przypadku wielu warunków case jest bardziej czytelny niż zagnieżdżone instrukcje if...elif.
  2. Elastyczność – umożliwia łatwe porównywanie wartości z różnymi wzorcami.
  3. Wydajność – instrukcja case działa szybciej niż wielokrotne sprawdzanie warunków za pomocą if.

Częste błędy i jak ich unikać

  1. Brak znaku ;; – każdy blok kodu musi być zakończony znakiem ;;.
    • Nieprawidłowo:
      case $opcja in
          1)
              echo "Opcja 1"
          2)
              echo "Opcja 2"
      esac
      
    • Prawidłowo:
      case $opcja in
          1)
              echo "Opcja 1"
              ;;
          2)
              echo "Opcja 2"
              ;;
      esac
      
  2. Niepoprawny wzorzec – należy pamiętać, że wzorce w case muszą być odpowiednio sformułowane.
  3. Zapomnienie o wzorcu domyślnym * – wzorzec domyślny pozwala obsłużyć sytuacje, gdy żadna inna opcja nie pasuje.

Podsumowanie

Instrukcja case w BASH to potężne narzędzie do obsługi warunków w skryptach. Dzięki swojej prostocie i czytelności jest niezastąpiona w sytuacjach, gdy mamy do czynienia z wieloma możliwymi wartościami zmiennej. Jej elastyczność i możliwość korzystania z wyrażeń regularnych sprawiają, że jest doskonałym wyborem dla programistów i administratorów systemów.

Opanowanie instrukcji case to krok w stronę bardziej zaawansowanego programowania w BASH i tworzenia skryptów, które są łatwe w utrzymaniu i efektywne w działaniu. Jeśli dopiero zaczynasz swoją przygodę z BASH, warto poświęcić czas na praktykę z tą konstrukcją – szybko przekonasz się, jak bardzo ułatwia ona życie!

Polecane wpisy
Zasady czystego kodu – jak pisać lepszy kod?
Zasady czystego kodu – jak pisać lepszy kod?

Zasady czystego kodu – jak pisać lepszy kod? W świecie programowania jakość kodu ma ogromne znaczenie. Niezależnie od używanego języka, Czytaj dalej