Bash Scripting – Case Statement

Bash Scripting – Case Statement

Izjava o primeru v skriptih bash se uporablja, ko je treba sprejeti odločitev proti več možnostim. Z drugimi besedami, uporabno je, če ima izraz možnost več vrednosti. To metodologijo lahko razumemo kot zamenjavo za več stavkov if v skriptu. Stavki primerov imajo prednost pred stavki if, ker izboljšajo berljivost naše kode in jih je lažje vzdrževati. Stavki Case v skriptu Bash so precej podobni stavkom Case v jeziku C. Toda za razliko od C stavek Bash Case preneha nadaljevati iskanje takoj, ko pride do ujemanja. Preprosto povedano, ne potrebujejo nobenega stavka za prekinitev, ki je obvezen za uporabo v C, da bi prenehali iskati vzorec.

Osnovna sintaksa stavka case je podana spodaj,

Sintaksa:

case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac 

Izjava o primeru deluje tako:

  • EXPRESSION> je spremenljivka ali vrednost, ki se ovrednoti glede na različne vzorce (primere), da se najde ujemanje.
  • Stavek primera se začne s ključno besedo case> sledi EXPRESSION> da se oceni.
  • Vsak primer je opredeljen z a Pattern_Case> ki predstavlja določeno vrednost ali vzorec, ki ga je treba primerjati z EXPRESSION> .
  • Po vsakem Pattern_Case> , obstajajo stavke, ki jih je treba izvršiti, če EXPRESSION> ujema s posebnim Pattern_Case> . Te izjave so označene z STATEMENTS> .
  • The ;;> na koncu vsakega STATEMENTS> blok označuje konec bloka primerov.
  • The *)> je poseben primer, znan kot privzeti primer. Če se nobeden od prejšnjih vzorcev ne ujema z EXPRESSION> , the STATEMENTS> pod *)> blok bo izveden.
  • The esac> ključna beseda označuje konec izjave primera.
  • Če se vzorec ne ujema, je status vračila nič. V nasprotnem primeru je status vrnitve izhodni status izvedenega telesa primera ujemajočega se vzorca.
  • Tako kot C zagotavlja privzeto ključno besedo za privzeti stavek, lahko tudi v stavku Bash case uporabimo nadomestni znak zvezdice (*) in definiramo končni vzorec primera, da definiramo privzeti primer.

1. primer: izpišite opis za vsako možnost

V tem primeru skript omogoča uporabniku, da izbere oddelek in prikaže opis, ki ustreza vnosu s pomočjo ukaza echo. V tem skriptu smo spremenljivki DEPARTMENT dodelili Računalništvo. Tako se izvede telo prvega primera vzorca.

Sledite lahko spodnjim navodilom:

1. Odprite terminal (Ctrl + Alt + T) in ustvarite skript:

department.sh 

2. Skriptu dodajte te izjave:

#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac 

3. Vsaka od vrstic je opisana spodaj:

  • Prva vrstica v scenariju se začne s shebangom (#!).
  • Operacijskemu sistemu naroči, naj za razčlenitev skripta uporabi določen tolmač.
  • Inicializirali smo spremenljivko DEPARTMENT kot Computer Science.
  • Zdaj uporabljamo izjavo primera.
  • Vsak izraz je bil obravnavan prek izjave case.
  • Zadnja vrstica, esac, je bila uporabljena za zaključek stavka case.

4. Shranite skript in ga naredite izvršljivega.

chmod +x department.sh 

5. Zaženite skript.

./department.sh 

Izhod:

406

Primer 2: Uporaba primerov z več vzorci

V vsakem členu lahko uporabimo več primerov vzorcev. Če se izraz ujema z vsaj enim vzorčnim primerom, se telo klavzule izvede. V tem skriptu smo spremenljivki DEPARTMENT dodelili Electronics and Communication. Tretji primer vzorca ima dve vrednosti, ločeni z navpično črto ( | ). Tako se izvede telo tretjega primera vzorca.

Sledite lahko spodnjim navodilom:

1. Odprite terminal (Ctrl + Alt + T) in ustvarite skript:

department.sh 

2. Skriptu dodajte te izjave:

#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac 

3. Vsaka od vrstic je bila obravnavana spodaj:

  • Prva vrstica v scenariju se začne s shebangom (#!).
  • Operacijskemu sistemu naroči, naj za razčlenitev skripta uporabi določen tolmač.
  • Inicializirali smo spremenljivko DEPARTMENT kot Electronics and Communication.
  • Zdaj uporabljamo izjavo primera.
  • Vsak izraz je bil obravnavan prek izjave case.
  • Zadnja vrstica, esac, je bila uporabljena za zaključek stavka case.

4. Shranite skript in ga naredite izvršljivega.

chmod +x department.sh 

5. Zaženite skript.

./department.sh 

Izhod:

407 Primer 3: za zanke

V tem skriptu smo oddelku dodelili tri učence razreda v nizu DEPARTMENT. Z drugimi besedami, obdelali bomo več kot en izraz, ki je opisan v spremenljivki DEPARTMENT. Za ponavljanje več izrazov lahko uporabimo zanko for.

Sledite lahko spodnjim navodilom:

1. Odprite terminal (Ctrl + Alt + T) in ustvarite skript:

department.sh 

2. Skriptu dodajte te izjave:

#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done 

3. Vsaka od vrstic je opisana spodaj:

  • Prva vrstica v scenariju se začne s shebangom (#!).
  • Operacijskemu sistemu naroči, naj za razčlenitev skripta uporabi določen tolmač.
  • Inicializirali smo matriko DEPARTMENT s tremi nizovnimi literali.
  • Zdaj s pomočjo for-zanke ponavljamo po nizu elementov.
  • Vsak izraz je bil obravnavan prek izjave case.
  • Zadnja vrstica, esac, je bila uporabljena za zaključek stavka case.

4. Shranite skript in ga naredite izvršljivega.

chmod +x department.sh 

5. Zaženite skript.

./department.sh 

Izhod:

408

Primer 4: Poziv uporabniku z Da ali Ne

Sledite lahko spodnjim navodilom:

1. Odprite terminal (Ctrl + Alt + T) in ustvarite skript:

department.sh 

2. Skriptu dodajte te izjave:

#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac 

3. Vsaka od vrstic je razložena spodaj:

  • Prva vrstica v scenariju se začne s shebangom (#!).
    • Operacijskemu sistemu naroči, naj za razčlenitev skripta uporabi določen tolmač.
  • Uporabnik se vpraša Ali ste študent? [ja ali ne].
  • Zdaj uporabnik poda odgovor prek tipkovnice.
  • Rezultat odgovora je bil obdelan prek izjave o primeru.
  • Zadnja vrstica, esac, je bila uporabljena za zaključek stavka case.

4. Shranite skript in ga naredite izvršljivega.

chmod +x department.sh 

5. Zaženite skript z uporabo spodnjega ukaza.

./department.sh 

Izhod:

409

Primer 5: Pošiljanje signala procesu

Sledite lahko spodnjim navodilom:

1. Odprite terminal (Ctrl + Alt + T) in ustvarite skript:

signals.sh 

2. Skriptu dodajte te izjave:

#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : $0 Signalnumber PID' exit fi # Case statement # Signal number (expression) case '$1' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP $2 ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT $2 ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT $2 ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL $2 ;; *) echo 'Signal number $1 has not been processed' ;; esac 

3. Vsaka od vrstic je razložena spodaj:

  • $1 je številka signala in $2 je ID procesa.
  • Za posredovanje ali pošiljanje signala danemu ID-ju procesa uporabimo ukaz kill.
  • To bo zagnalo ukaz za spanje za nekaj sekund.
  • Telo neobvezne zadnje primerjave *) bo izvedeno v privzetem primeru.

4. Shranite skript.

5. Zaženite skript z uporabo spodnjega ukaza.

./signals.sh 

Izhod:

$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed