I blocchi CASE

Introduzione al Bash Scripting

Alex Scriven

Data Scientist

Perché usare CASE

I blocchi CASE possono essere più efficienti degli IF con condizioni multiple o complesse.

Supponiamo di voler testare queste condizioni e azioni:

  • Se un file contiene sydney, spostalo nella directory /sydney
  • Se un file contiene melbourne o brisbane, eliminalo
  • Se un file contiene canberra, rinominalo in IMPORTANT_filename, dove filename è il nome originale
Introduzione al Bash Scripting

Un IF complesso

Potresti costruire più IF così:

  • Questo codice chiama grep sul primo argomento ARGV per la condizione.
if grep -q 'sydney' $1; then
    mv $1 sydney/
fi
if grep -q 'melbourne|brisbane' $1; then
    rm $1
fi
if grep -q 'canberra' $1; then
    mv $1 "IMPORTANT_$1"
fi
  • Sembra complesso e ripetitivo, vero?
Introduzione al Bash Scripting

Costruire un CASE

  • Inizia scegliendo la variabile o stringa da confrontare
    • Puoi annidare una shell qui!
  • Aggiungi quante corrispondenze e azioni vuoi.
    • Puoi usare regex per PATTERN, ad es. Air* per 'inizia con Air' o *hat* per 'contiene hat'.
  • Separa pattern e comando con una parentesi chiusa e termina i comandi con doppio punto e virgola

Formato base di CASE:

case 'STRINGVAR' in

PATTERN1) COMMAND1;; PATTERN2) COMMAND2;;
Introduzione al Bash Scripting

Costruire un CASE

 

  • *) DEFAULT COMMAND;;

    • È comune (ma non obbligatorio) chiudere con un comando predefinito che parte se nessun pattern corrisponde.
  • esac Infine, la parola di chiusura è 'esac'

    • È 'case' scritto al contrario!

Formato base di CASE:

case 'STRING' in
  PATTERN1)
  COMMAND1;;
  PATTERN2)
  COMMAND2;;

*) DEFAULT COMMAND;;
esac
Introduzione al Bash Scripting

Da IF a CASE

Il nostro vecchio IF:

if grep -q 'sydney' $1; then
    mv $1 sydney/
fi

if grep -q 'melbourne|brisbane' $1; then
    rm $1
fi

if grep -q 'canberra' $1; then
    mv $1 "IMPORTANT_$1"
fi

Il nostro nuovo CASE:

case $(cat $1) in

*sydney*) mv $1 sydney/ ;; *melbourne*|*brisbane*) rm $1 ;; *canberra*) mv $1 "IMPORTANT_$1" ;;
*) echo "No cities found" ;; esac
Introduzione al Bash Scripting

Passons à la pratique !

Introduzione al Bash Scripting

Preparing Video For Download...