logo

Bash Scripting – Case Statement

Vyhlásenie prípadu v bash skriptoch sa používa, keď sa musí rozhodnúť proti viacerým voľbám. Inými slovami, je to užitočné, keď výraz môže mať viacero hodnôt. Túto metodiku možno považovať za náhradu viacerých príkazov if v skripte. Príkazy prípadu majú výhodu oproti príkazom if, pretože zlepšujú čitateľnosť nášho kódu a ľahšie sa udržiavajú. Príkazy Case v Bash skripte sú dosť podobné príkazom Case v jazyku C. Ale na rozdiel od C, vyhlásenie Bash Case prestane pokračovať v hľadaní hneď, ako dôjde k zhode. Jednoducho povedané, nevyžadujú žiadne vyhlásenie o prerušení, ktoré je povinné použiť v jazyku C na zastavenie ďalšieho hľadania vzoru.

Základná syntax príkazu case je uvedená nižšie,



Syntax:

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

Vyhlásenie prípadu funguje takto:

  • EXPRESSION>je premenná alebo hodnota, ktorá sa vyhodnocuje podľa rôznych vzorov (prípadov), aby sa našla zhoda.
  • Príkaz case začína kľúčovým slovomcase>nasledujeEXPRESSION>hodnotiť.
  • Každý prípad je definovaný aPattern_Case>ktorý predstavuje špecifickú hodnotu alebo vzor, ​​ktorý sa má porovnať sEXPRESSION>.
  • Po každomPattern_Case>, existujú príkazy, ktoré sa majú vykonať, akEXPRESSION>zodpovedá konkrétnemuPattern_Case>. Tieto vyhlásenia sú označenéSTATEMENTS>.
  • The;;>na konci každéhoSTATEMENTS>blok označuje koniec bloku malých písmen.
  • The*)>je špeciálny prípad známy ako predvolený prípad. Ak sa žiadny z predchádzajúcich vzorov nezhoduje sEXPRESSION>,STATEMENTS>pod*)>blok sa vykoná.
  • Theesac>kľúčové slovo označuje koniec prípadu.
  • V prípade, že sa nezhoduje žiadny vzor, ​​návratový stav je nula. V opačnom prípade je návratový stav výstupným stavom vykonaného tela prípadu zhodného vzoru.
  • Podobne ako C poskytuje predvolené kľúčové slovo pre predvolený príkaz, podobne aj v príkaze Bash case, môžeme použiť zástupný symbol hviezdičky (*) a definovať prípad konečného vzoru na definovanie predvoleného prípadu.

Príklad 1: Výstup popisu pre každú možnosť

V tomto príklade skript umožňuje používateľovi vybrať oddelenie a pomocou príkazu echo zobrazuje popis zodpovedajúci zadávaniu. V tomto skripte sme priradili premennú ODDELENIE ako Informatika. Takto sa vykoná telo prvého prípadu vzoru.



Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:



normalizácia rdbms
#!/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. Každý z riadkov je popísaný nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
  • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Inicializovali sme premennú ODDELENIA ako Computer Science.
  • Teraz používame vyhlásenie o prípade.
  • Každý výraz bol spracovaný prostredníctvom príkazu case.
  • Posledný riadok, esac, sa použil na ukončenie výpisu prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript.

./department.sh>

Výkon:

406

Príklad 2: Použitie prípadov viacerých vzorov

V každej klauzule môžeme použiť viacero vzorových prípadov. Ak sa výraz zhoduje s aspoň jedným prípadom vzoru, telo klauzuly sa vykoná. V tomto skripte sme premennú ODDELENIE priradili ako Elektronika a komunikácia. Tretí prípad vzoru má dve hodnoty oddelené zvislým operátorom ( | ). Takto sa vykoná telo tretieho prípadu vzoru.

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov bol prediskutovaný nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
  • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Inicializovali sme premennú ODDELENIA ako Elektronika a komunikácia.
  • Teraz používame vyhlásenie o prípade.
  • Každý výraz bol spracovaný prostredníctvom príkazu case.
  • Posledný riadok, esac, sa použil na ukončenie výpisu prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript.

./department.sh>

Výkon:

407 Príklad 3: pre slučky

V tomto skripte sme priradili oddelenie troch študentov triedy v poli DEPARTMENT. Inými slovami, budeme spracovávať viac ako jeden výraz, ktorý je popísaný v premennej ODDELENIE. Na iteráciu viacerých výrazov môžeme použiť cyklus for.

Môžete postupovať podľa pokynov uvedených nižšie:

bash if podmienka

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov je popísaný nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
  • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Inicializovali sme pole DEPARTMENT s tromi reťazcovými literálmi.
  • Teraz pomocou slučky for iterujeme pole prvkov.
  • Každý výraz bol spracovaný prostredníctvom príkazu case.
  • Posledný riadok, esac, bol použitý na ukončenie prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript.

./department.sh>

Výkon:

408

Príklad 4: Vyzvať užívateľa s Áno alebo Nie

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov je vysvetlený nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
    • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Používateľovi sa zobrazí výzva Ste študent? [Áno alebo nie].
  • Teraz používateľ zadáva odpoveď prostredníctvom klávesnice.
  • Výstup odpovede bol spracovaný prostredníctvom prípadu.
  • Posledný riadok, esac, sa použil na ukončenie výpisu prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript pomocou nižšie uvedeného príkazu.

java ak inak
./department.sh>

Výkon:

409

Príklad 5: Odoslanie signálu do procesu

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

signals.sh>

2. Pridajte do skriptu tieto príkazy:

#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : 

Vyhlásenie prípadu v bash skriptoch sa používa, keď sa musí rozhodnúť proti viacerým voľbám. Inými slovami, je to užitočné, keď výraz môže mať viacero hodnôt. Túto metodiku možno považovať za náhradu viacerých príkazov if v skripte. Príkazy prípadu majú výhodu oproti príkazom if, pretože zlepšujú čitateľnosť nášho kódu a ľahšie sa udržiavajú. Príkazy Case v Bash skripte sú dosť podobné príkazom Case v jazyku C. Ale na rozdiel od C, vyhlásenie Bash Case prestane pokračovať v hľadaní hneď, ako dôjde k zhode. Jednoducho povedané, nevyžadujú žiadne vyhlásenie o prerušení, ktoré je povinné použiť v jazyku C na zastavenie ďalšieho hľadania vzoru.

Základná syntax príkazu case je uvedená nižšie,

Syntax:

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

Vyhlásenie prípadu funguje takto:

  • EXPRESSION>je premenná alebo hodnota, ktorá sa vyhodnocuje podľa rôznych vzorov (prípadov), aby sa našla zhoda.
  • Príkaz case začína kľúčovým slovomcase>nasledujeEXPRESSION>hodnotiť.
  • Každý prípad je definovaný aPattern_Case>ktorý predstavuje špecifickú hodnotu alebo vzor, ​​ktorý sa má porovnať sEXPRESSION>.
  • Po každomPattern_Case>, existujú príkazy, ktoré sa majú vykonať, akEXPRESSION>zodpovedá konkrétnemuPattern_Case>. Tieto vyhlásenia sú označenéSTATEMENTS>.
  • The;;>na konci každéhoSTATEMENTS>blok označuje koniec bloku malých písmen.
  • The*)>je špeciálny prípad známy ako predvolený prípad. Ak sa žiadny z predchádzajúcich vzorov nezhoduje sEXPRESSION>,STATEMENTS>pod*)>blok sa vykoná.
  • Theesac>kľúčové slovo označuje koniec prípadu.
  • V prípade, že sa nezhoduje žiadny vzor, ​​návratový stav je nula. V opačnom prípade je návratový stav výstupným stavom vykonaného tela prípadu zhodného vzoru.
  • Podobne ako C poskytuje predvolené kľúčové slovo pre predvolený príkaz, podobne aj v príkaze Bash case, môžeme použiť zástupný symbol hviezdičky (*) a definovať prípad konečného vzoru na definovanie predvoleného prípadu.

Príklad 1: Výstup popisu pre každú možnosť

V tomto príklade skript umožňuje používateľovi vybrať oddelenie a pomocou príkazu echo zobrazuje popis zodpovedajúci zadávaniu. V tomto skripte sme priradili premennú ODDELENIE ako Informatika. Takto sa vykoná telo prvého prípadu vzoru.

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov je popísaný nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
  • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Inicializovali sme premennú ODDELENIA ako Computer Science.
  • Teraz používame vyhlásenie o prípade.
  • Každý výraz bol spracovaný prostredníctvom príkazu case.
  • Posledný riadok, esac, sa použil na ukončenie výpisu prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript.

./department.sh>

Výkon:

406

Príklad 2: Použitie prípadov viacerých vzorov

V každej klauzule môžeme použiť viacero vzorových prípadov. Ak sa výraz zhoduje s aspoň jedným prípadom vzoru, telo klauzuly sa vykoná. V tomto skripte sme premennú ODDELENIE priradili ako Elektronika a komunikácia. Tretí prípad vzoru má dve hodnoty oddelené zvislým operátorom ( | ). Takto sa vykoná telo tretieho prípadu vzoru.

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov bol prediskutovaný nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
  • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Inicializovali sme premennú ODDELENIA ako Elektronika a komunikácia.
  • Teraz používame vyhlásenie o prípade.
  • Každý výraz bol spracovaný prostredníctvom príkazu case.
  • Posledný riadok, esac, sa použil na ukončenie výpisu prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript.

./department.sh>

Výkon:

407 Príklad 3: pre slučky

V tomto skripte sme priradili oddelenie troch študentov triedy v poli DEPARTMENT. Inými slovami, budeme spracovávať viac ako jeden výraz, ktorý je popísaný v premennej ODDELENIE. Na iteráciu viacerých výrazov môžeme použiť cyklus for.

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov je popísaný nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
  • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Inicializovali sme pole DEPARTMENT s tromi reťazcovými literálmi.
  • Teraz pomocou slučky for iterujeme pole prvkov.
  • Každý výraz bol spracovaný prostredníctvom príkazu case.
  • Posledný riadok, esac, bol použitý na ukončenie prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript.

./department.sh>

Výkon:

408

Príklad 4: Vyzvať užívateľa s Áno alebo Nie

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

department.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov je vysvetlený nižšie:

  • Prvý riadok v skripte začína znakom shebang (#!).
    • Inštruuje operačný systém, aby použil konkrétny interpret na analýzu skriptu.
  • Používateľovi sa zobrazí výzva Ste študent? [Áno alebo nie].
  • Teraz používateľ zadáva odpoveď prostredníctvom klávesnice.
  • Výstup odpovede bol spracovaný prostredníctvom prípadu.
  • Posledný riadok, esac, sa použil na ukončenie výpisu prípadu.

4. Uložte skript a urobte ho spustiteľným.

chmod +x department.sh>

5. Spustite skript pomocou nižšie uvedeného príkazu.

./department.sh>

Výkon:

409

Príklad 5: Odoslanie signálu do procesu

Môžete postupovať podľa pokynov uvedených nižšie:

1. Otvorte terminál (Ctrl + Alt + T) a vytvorte skript:

signals.sh>

2. Pridajte do skriptu tieto príkazy:

#!/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. Každý z riadkov je vysvetlený nižšie:

  • $1 je číslo signálu a $2 je ID procesu.
  • Na odovzdanie alebo odoslanie signálu danému ID procesu používame príkaz kill.
  • Tým sa na niekoľko sekúnd spustí príkaz spánku.
  • Telo voliteľného posledného porovnania *) sa vykoná v predvolenom prípade.

4. Uložte skript.

5. Spustite skript pomocou nižšie uvedeného príkazu.

./signals.sh>

Výkon:

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


Signalnumber PID' exit fi # Case statement # Signal number (expression) case '' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL ;; *) echo 'Signal number has not been processed' ;; esac>

3. Každý z riadkov je vysvetlený nižšie:

  • je číslo signálu a je ID procesu.
  • Na odovzdanie alebo odoslanie signálu danému ID procesu používame príkaz kill.
  • Tým sa na niekoľko sekúnd spustí príkaz spánku.
  • Telo voliteľného posledného porovnania *) sa vykoná v predvolenom prípade.

4. Uložte skript.

5. Spustite skript pomocou nižšie uvedeného príkazu.

./signals.sh>

Výkon:

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