Příkazy CASE

Úvod do Bash skriptování

Alex Scriven

Data Scientist

Proč používat příkazy CASE

Příkazy CASE mohou být efektivnější než IF při více nebo složitých podmínkách.

Předpokládejme, že chcete otestovat tyto podmínky a akce:

  • Pokud soubor obsahuje sydney, přesuňte jej do adresáře /sydney
  • Pokud soubor obsahuje melbourne nebo brisbane, odstraňte jej
  • Pokud soubor obsahuje canberra, přejmenujte jej na IMPORTANT_filename, kde filename je původní název
Úvod do Bash skriptování

Složitý příkaz IF

Lze použít více příkazů IF:

  • Kód volá grep na prvním argumentu ARGV pro podmínku.
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
  • Složité a opakující se, že?
Úvod do Bash skriptování

Sestavení příkazu CASE

  • Nejprve vyberte proměnnou nebo řetězec pro porovnání
    • Lze použít shell uvnitř shellu!
  • Přidejte libovolný počet vzorů a akcí.
    • Pro PATTERN lze použít regex, např. Air* pro „začíná na Air" nebo *hat* pro „obsahuje hat".
  • Vzor a příkaz oddělte zavírací závorkou, příkazy ukončete dvojitým středníkem

Základní formát příkazu CASE:

case 'STRINGVAR' in

PATTERN1) COMMAND1;; PATTERN2) COMMAND2;;
Úvod do Bash skriptování

Sestavení příkazu CASE

 

  • *) DEFAULT COMMAND;;

    • Obvyklé (ale nepovinné) je zakončení výchozím příkazem, který se spustí, pokud žádný vzor neodpovídá.
  • esac Závěrečné slovo je 'esac'

    • Jde o slovo 'case' napsané pozpátku!

Základní formát příkazu CASE:

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

*) DEFAULT COMMAND;;
esac
Úvod do Bash skriptování

Od IF k CASE

Náš původní příkaz 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

Náš nový příkaz CASE:

case $(cat $1) in

*sydney*) mv $1 sydney/ ;; *melbourne*|*brisbane*) rm $1 ;; *canberra*) mv $1 "IMPORTANT_$1" ;;
*) echo "No cities found" ;; esac
Úvod do Bash skriptování

Pojďme cvičit!

Úvod do Bash skriptování

Preparing Video For Download...