Instrucțiuni CASE

Introducere în Bash Scripting

Alex Scriven

Data Scientist

Nevoia de instrucțiuni CASE

Instrucțiunile CASE pot fi mai eficiente decât IF atunci când există condiții multiple sau complexe.

Să presupunem că doriți să testați următoarele condiții și acțiuni:

  • Dacă un fișier conține sydney, mutați-l în directorul /sydney
  • Dacă un fișier conține melbourne sau brisbane, ștergeți-l
  • Dacă un fișier conține canberra, redenumiți-l ca IMPORTANT_filename, unde filename este numele original
Introducere în Bash Scripting

O instrucțiune IF complexă

Puteți construi mai multe instrucțiuni IF astfel:

  • Acest cod apelează grep pe primul argument ARGV pentru condiție.
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
  • Pare complex și repetitiv, nu-i așa?
Introducere în Bash Scripting

Construirea unei instrucțiuni CASE

  • Începeți prin a selecta variabila sau șirul față de care se face comparația
    • Puteți utiliza shell-în-shell aici!
  • Adăugați oricâte tipare și acțiuni doriți.
    • Puteți folosi regex pentru PATTERN. De exemplu, Air* pentru „începe cu Air" sau *hat* pentru „conține hat".
  • Separați tiparul de comanda de executat printr-o paranteză de închidere și terminați comenzile cu punct și virgulă dublu

Formatul de bază al instrucțiunii CASE:

case 'STRINGVAR' in

PATTERN1) COMMAND1;; PATTERN2) COMMAND2;;
Introducere în Bash Scripting

Construirea unei instrucțiuni CASE

 

  • *) DEFAULT COMMAND;;

    • Este uzual (dar nu obligatoriu) să se încheie cu o comandă implicită, executată dacă niciun tipar nu se potrivește.
  • esac În final, cuvântul de încheiere este „esac"

    • Este „case" scris invers!

Formatul de bază al instrucțiunii CASE:

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

*) DEFAULT COMMAND;;
esac
Introducere în Bash Scripting

De la IF la CASE

Instrucțiunea IF anterioară:

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

Noua instrucțiune CASE:

case $(cat $1) in

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

Să exersăm!

Introducere în Bash Scripting

Preparing Video For Download...