case în Linux / Bash

Scripting Bash POSIX / Bash built-in

Ramificare multi-opțiune bazată pe potrivirea de tipare text (pattern matching).

Sintaxă comandă
case "$variabilă" in
  tipar1)
    comenzi ;;
  tipar2|tipar3)
    comenzi ;;
  *)
    comenzi_implicite ;;
esac

Ce face case

Instrucțiunea case este echivalentul structurii switch din alte limbaje de programare. Este mult mai curată și lizibilă decât o înlănțuire lungă de if ... elif ... elif.

Fiecare ramură se încheie obligatoriu cu două caractere punct și virgulă (;;). Modelul * la sfârșit funcționează ca o clauză implicită (default) dacă niciun alt tipar nu s-a potrivit.

Opțiuni și argumente

Opțiune / Parametru Descriere
tipar) Modelul căutat (poate include măști precum *, ? sau intervale [a-z]).
tipar1 | tipar2) Bara verticală (pipe) permite verificarea mai multor variante pe aceeași ramură.
;; Marchează sfârșitul instrucțiunilor pentru ramura curentă.
*) Ramura implicită (se execută dacă nu s-a potrivit niciuna de mai sus).

Exemple

Exemplul 1: Procesarea argumentelor unui script de control

Gestionăm comenzile start, stop și status.

ACTIUNE="start"
case "$ACTIUNE" in
  start)
    echo "Pornire serviciu..." ;;
  stop)
    echo "Oprire serviciu..." ;;
  status)
    echo "Verificare stare..." ;;
  *)
    echo "Comanda necunoscuta" ;;
esac

Rezultat

Pornire serviciu...

Greșeli frecvente

  • Omiterea separatorului dublu ;; la sfârșitul unei ramuri, ceea ce provoacă o eroare de sintaxă la parsarea scriptului.

Comenzi înrudite

  • if / else: Execuția condiționată a blocurilor de comenzi pe baza codurilor de ieșire sau a testelor logice.
  • for: Iterează peste o listă de elemente, fișiere, argumente sau intervale de numere.