Introduzione

Le dichiarazioni Case di Bash sono generalmente utilizzate per semplificare condizionali complessi quando si hanno più scelte diverse. L'uso dell'istruzione case a differenza delle istruzioni if ​​annidate ti aiuterà a rendere i tuoi script bash più leggibili e più facili da gestire.

L'istruzione case Bash ha un concetto simile con l'istruzione switch Javascript o C. La differenza principale è che, diversamente dall'istruzione switch C, l'istruzione Case Bash non continua a cercare una corrispondenza di pattern una volta trovata ed eseguita.

In questo tutorial, tratteremo le basi delle dichiarazioni del Case  Bash e ti mostreremo come usarle negli script della shell.

Sintassi dell'istruzione Case

L'istruzione Case Bash ha la forma seguente:

case EXPRESSION in

  PATTERN_1)
    STATEMENTS
    ;;

  PATTERN_2)
    STATEMENTS
    ;;

  PATTERN_N)
    STATEMENTS
    ;;

  *)
    STATEMENTS
    ;;
esac
  • Ogni istruzione Case inizia con la parola chiave case seguita dall'espressione Case e dalla parola chiave in. L'istruzione termina con la parola chiave esac.
  • È possibile utilizzare più condizioni separate dall'operatore |. L'operatore ) termina un elenco di schemi.
  • Un modello può avere caratteri speciali .
  • Un modello e i comandi associati sono noti come clausole.
  • Ogni clausola deve essere risolta con ;;.
  • Vengono eseguiti i comandi corrispondenti al primo modello che corrisponde all'espressione.
  • È pratica comune utilizzare il simbolo asterisco jolly * come modello finale per definire il case predefinito. Questo modello corrisponderà sempre.
  • Se non viene trovato alcun risultato, lo stato di ritorno è zero. Altrimenti, lo stato di ritorno è lo stato di uscita dei comandi eseguiti.

Esempio di Case

Ecco un esempio usando l'istruzione Case in uno script Bash che stamperà la lingua ufficiale di un determinato paese:

#!/bin/bash

echo -n "Enter the name of a country: "
read COUNTRY

echo -n "The official language of $COUNTRY is "

case $COUNTRY in

  Lithuania)
    echo -n "Lithuanian"
    ;;

  Romania | Moldova)
    echo -n "Romanian"
    ;;

  Italy | "San Marino" | Switzerland | "Vatican City")
    echo -n "Italian"
    ;;

  *)
    echo -n "unknown"
    ;;
esac

Salvare lo script personalizzato come file ed eseguirlo dalla riga di comando.

bash languages.sh

Lo script ti chiederà di entrare in un paese. Ad esempio, se si digita "Lituania", corrisponderà al primo modello e verrà eseguito il comando echo  in quella clausola.

Lo script stamperà il seguente output:

Enter the name of a country: Lithuania
The official language of Lithuania is Lithuanian

Se si immette un paese che non corrisponde ad alcun altro motivo tranne il simbolo asterisco jolly predefinito, supponiamo che in Argentina lo script eseguirà il comando echo all'interno della clausola predefinita.

Enter the name of a country: Argentina
The official language of Argentina is unknown

Conclusione

Ormai dovresti avere una buona conoscenza di come scrivere le dichiarazioni Case di bash. Sono spesso usati per passare parametri a uno script di shell dalla riga di comando. Ad esempio, gli script init utilizzano le istruzioni Case per l'avvio, l'arresto o il riavvio dei servizi.