logo

Bash Scripting – Case Statement

Vyjádření případu ve skriptech bash se používá, když je třeba učinit rozhodnutí proti více možnostem. Jinými slovy, je užitečné, když výraz může mít více hodnot. Tuto metodologii lze považovat za náhradu za více příkazů if ve skriptu. Příkazy Case mají výhodu oproti příkazům if, protože zlepšují čitelnost našeho kódu a snadněji se udržují. Příkazy Case ve skriptu Bash jsou velmi podobné příkazům Case v jazyce C. Ale na rozdíl od C přestane příkaz Bash Case pokračovat v hledání, jakmile dojde ke shodě. Jednoduše řečeno, nevyžadují žádný příkaz přerušení, který je povinný použít v C, aby přestal hledat vzor.

Základní syntaxe příkazu case je uvedena níže,



Syntax:

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

Takto funguje prohlášení o případu:

  • EXPRESSION>je proměnná nebo hodnota, která se vyhodnocuje proti různým vzorům (případům), aby se našla shoda.
  • Příkaz case začíná klíčovým slovemcase>následujeEXPRESSION>být hodnocen.
  • Každý případ je definován aPattern_Case>která představuje konkrétní hodnotu nebo vzor, ​​který má být porovnán sEXPRESSION>.
  • Po každémPattern_Case>, existují příkazy, které mají být provedeny, pokudEXPRESSION>odpovídá konkrétnímuPattern_Case>. Tato prohlášení jsou označenaSTATEMENTS>.
  • The;;>na konci každéhoSTATEMENTS>blok označuje konec bloku případu.
  • The*)>je speciální případ známý jako výchozí případ. Pokud žádný z předchozích vzorů neodpovídáEXPRESSION>,STATEMENTS>pod*)>blok bude proveden.
  • Theesac>klíčové slovo označuje konec případu.
  • V případě, že žádný vzor neodpovídá, návratový stav je nula. V opačném případě je návratový stav výstupním stavem provedeného těla případu shodného vzoru.
  • Stejně jako C poskytuje výchozí klíčové slovo pro výchozí příkaz, podobně v příkazu Bash case, můžeme použít zástupný symbol hvězdičky (*) a definovat případ konečného vzoru pro definování výchozího případu.

Příklad 1: Výstup popisu pro každou možnost

V tomto příkladu skript umožňuje uživateli vybrat oddělení a zobrazuje popis odpovídající zadání pomocí příkazu echo. V tomto skriptu jsme přiřadili proměnnou ODDĚLENÍ jako Computer Science. Tím se provede tělo prvního případu vzoru.



Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků je popsán níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
  • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Inicializovali jsme proměnnou ODDĚLENÍ jako Computer Science.
  • Nyní používáme případové prohlášení.
  • Každý výraz byl zpracován pomocí příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript.

./department.sh>

Výstup:

406

Příklad 2: Použití případů s více vzory

V každé klauzuli můžeme použít více případů vzoru. Pokud se výraz shoduje s alespoň jedním případem vzoru, pak se tělo klauzule provede. V tomto skriptu jsme přiřadili proměnnou ODDĚLENÍ jako Elektronika a komunikace. Třetí případ vzoru má dvě hodnoty oddělené svislým operátorem ( | ). Tím se provede tělo třetího případu vzoru.

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků byl popsán níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
  • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Inicializovali jsme proměnnou ODDĚLENÍ jako Elektronika a komunikace.
  • Nyní používáme případové prohlášení.
  • Každý výraz byl zpracován pomocí příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript.

./department.sh>

Výstup:

407 Příklad 3: pro smyčky

V tomto skriptu jsme přiřadili oddělení tří studentů třídy v poli DEPARTMENT. Jinými slovy, budeme zpracovávat více než jeden výraz, který je popsán v proměnné DEPARTMENT. Pro iteraci přes více výrazů můžeme použít cyklus for.

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků je popsán níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
  • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Inicializovali jsme pole DEPARTMENT se třemi řetězcovými literály.
  • Nyní s pomocí for-loop iterujeme pole prvků.
  • Každý výraz byl zpracován pomocí příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript.

./department.sh>

Výstup:

408

Příklad 4: Dotázat se uživatele s Ano nebo Ne

Můžete postupovat podle pokynů uvedených níže:

java boolean na řetězec

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků je vysvětlen níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
    • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Uživatel je vyzván jako Jste student? [Ano nebo ne].
  • Nyní uživatel zadává odpověď prostřednictvím klávesnice.
  • Výstup odpovědi byl zpracován prostřednictvím příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript pomocí níže uvedeného příkazu.

./department.sh>

Výstup:

409

Příklad 5: Odeslání signálu do procesu

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

signals.sh>

2. Přidejte do skriptu tyto příkazy:

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

Vyjádření případu ve skriptech bash se používá, když je třeba učinit rozhodnutí proti více možnostem. Jinými slovy, je užitečné, když výraz může mít více hodnot. Tuto metodologii lze považovat za náhradu za více příkazů if ve skriptu. Příkazy Case mají výhodu oproti příkazům if, protože zlepšují čitelnost našeho kódu a snadněji se udržují. Příkazy Case ve skriptu Bash jsou velmi podobné příkazům Case v jazyce C. Ale na rozdíl od C přestane příkaz Bash Case pokračovat v hledání, jakmile dojde ke shodě. Jednoduše řečeno, nevyžadují žádný příkaz přerušení, který je povinný použít v C, aby přestal hledat vzor.

Základní syntaxe příkazu case je uvedena níže,

Syntax:

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

Takto funguje prohlášení o případu:

  • EXPRESSION>je proměnná nebo hodnota, která se vyhodnocuje proti různým vzorům (případům), aby se našla shoda.
  • Příkaz case začíná klíčovým slovemcase>následujeEXPRESSION>být hodnocen.
  • Každý případ je definován aPattern_Case>která představuje konkrétní hodnotu nebo vzor, ​​který má být porovnán sEXPRESSION>.
  • Po každémPattern_Case>, existují příkazy, které mají být provedeny, pokudEXPRESSION>odpovídá konkrétnímuPattern_Case>. Tato prohlášení jsou označenaSTATEMENTS>.
  • The;;>na konci každéhoSTATEMENTS>blok označuje konec bloku případu.
  • The*)>je speciální případ známý jako výchozí případ. Pokud žádný z předchozích vzorů neodpovídáEXPRESSION>,STATEMENTS>pod*)>blok bude proveden.
  • Theesac>klíčové slovo označuje konec případu.
  • V případě, že žádný vzor neodpovídá, návratový stav je nula. V opačném případě je návratový stav výstupním stavem provedeného těla případu shodného vzoru.
  • Stejně jako C poskytuje výchozí klíčové slovo pro výchozí příkaz, podobně v příkazu Bash case, můžeme použít zástupný symbol hvězdičky (*) a definovat případ konečného vzoru pro definování výchozího případu.

Příklad 1: Výstup popisu pro každou možnost

V tomto příkladu skript umožňuje uživateli vybrat oddělení a zobrazuje popis odpovídající zadání pomocí příkazu echo. V tomto skriptu jsme přiřadili proměnnou ODDĚLENÍ jako Computer Science. Tím se provede tělo prvního případu vzoru.

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků je popsán níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
  • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Inicializovali jsme proměnnou ODDĚLENÍ jako Computer Science.
  • Nyní používáme případové prohlášení.
  • Každý výraz byl zpracován pomocí příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript.

./department.sh>

Výstup:

406

Příklad 2: Použití případů s více vzory

V každé klauzuli můžeme použít více případů vzoru. Pokud se výraz shoduje s alespoň jedním případem vzoru, pak se tělo klauzule provede. V tomto skriptu jsme přiřadili proměnnou ODDĚLENÍ jako Elektronika a komunikace. Třetí případ vzoru má dvě hodnoty oddělené svislým operátorem ( | ). Tím se provede tělo třetího případu vzoru.

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků byl popsán níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
  • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Inicializovali jsme proměnnou ODDĚLENÍ jako Elektronika a komunikace.
  • Nyní používáme případové prohlášení.
  • Každý výraz byl zpracován pomocí příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript.

./department.sh>

Výstup:

407 Příklad 3: pro smyčky

V tomto skriptu jsme přiřadili oddělení tří studentů třídy v poli DEPARTMENT. Jinými slovy, budeme zpracovávat více než jeden výraz, který je popsán v proměnné DEPARTMENT. Pro iteraci přes více výrazů můžeme použít cyklus for.

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků je popsán níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
  • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Inicializovali jsme pole DEPARTMENT se třemi řetězcovými literály.
  • Nyní s pomocí for-loop iterujeme pole prvků.
  • Každý výraz byl zpracován pomocí příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript.

./department.sh>

Výstup:

408

Příklad 4: Dotázat se uživatele s Ano nebo Ne

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

department.sh>

2. Přidejte do skriptu tyto pří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 řádků je vysvětlen níže:

  • První řádek ve skriptu začíná znakem shebang (#!).
    • Instruuje operační systém, aby použil konkrétní interpret k analýze skriptu.
  • Uživatel je vyzván jako Jste student? [Ano nebo ne].
  • Nyní uživatel zadává odpověď prostřednictvím klávesnice.
  • Výstup odpovědi byl zpracován prostřednictvím příkazu case.
  • Poslední řádek, esac, byl použit k ukončení případu.

4. Uložte skript a udělejte jej spustitelný.

chmod +x department.sh>

5. Spusťte skript pomocí níže uvedeného příkazu.

./department.sh>

Výstup:

409

Příklad 5: Odeslání signálu do procesu

Můžete postupovat podle pokynů uvedených níže:

1. Otevřete terminál (Ctrl + Alt + T) a vytvořte skript:

signals.sh>

2. Přidejte do skriptu tyto pří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 řádků je vysvětlen níže:

  • $1 je číslo signálu a $2 je id procesu.
  • K předání nebo odeslání signálu danému id procesu používáme příkaz kill.
  • Tím se na několik sekund spustí příkaz spánku.
  • Tělo volitelného posledního porovnání *) bude provedeno ve výchozím případě.

4. Uložte skript.

5. Spusťte skript pomocí níže uvedeného příkazu.

./signals.sh>

Výstup:

$ 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 řádků je vysvětlen níže:

  • je číslo signálu a je id procesu.
  • K předání nebo odeslání signálu danému id procesu používáme příkaz kill.
  • Tím se na několik sekund spustí příkaz spánku.
  • Tělo volitelného posledního porovnání *) bude provedeno ve výchozím případě.

4. Uložte skript.

5. Spusťte skript pomocí níže uvedeného příkazu.

./signals.sh>

Výstup:

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