GNU/Linux >> Znalost Linux >  >> Linux

Bash case Syntaxe a příklady

Úvod

case bash příkaz je nejjednodušší formou podmíněného příkazu if elif else. case příkaz zjednodušuje složité podmínky s více různými možnostmi. Toto prohlášení se snáze udržuje a je čitelnější než vnořené if prohlášení.

case příkaz testuje vstupní hodnotu, dokud nenajde odpovídající vzor a nespustí příkaz spojený s touto vstupní hodnotou. Jedná se tedy o vynikající volbu pro vytváření nabídek, kde uživatelé vybírají možnost, která spustí odpovídající akci.

V tomto tutoriálu se naučíte case bash základy prohlášení a jak jej používat ve skriptech shellu.

Předpoklady

  • Počítač se systémem Linux.
  • Přístup k příkazovému řádku.
  • Textový editor, jako je vi/vim.

Syntaxe příkazu Bash case

case bash příkaz má následující syntaxi:

case $variable in
pattern-1)
  commands;;
pattern-2)
  commands;;
pattern-3)
  commands;;
pattern-N)
  commands;;
*)
  commands;;
esac

case příkaz začíná case klíčové slovo následované $variable a in klíčové slovo. Příkaz končí case klíčové slovo pozpátku - esac .

$variable

  • Skript porovnává vstup $variable proti vzorům v každé klauzuli, dokud nenajde shodu.

Vzory

  • Vzor a jeho příkazy tvoří klauzuli , která končí na ;; .
  • Vzory podporují speciální znaky.
  • ) operátor ukončí seznam vzorů.
  • | operátor odděluje více vzorů.
  • Skript provede příkazy odpovídající prvnímu vzoru odpovídajícímu vstupu $variable .
  • Hvězdička * symbol definuje výchozí velikost písmen, obvykle v konečném vzoru.

Stav ukončení

Skript má dva stavy ukončení:

  • 0 . Návratový stav, když vstup neodpovídá žádnému vzoru.
  • Stav provedeného příkazu . Pokud příkaz odpovídá vstupní proměnné vzoru, vrátí se stav ukončení provedeného příkazu.

Příklady příkazů Bash case

Tato část ukazuje praktické příklady použití case bash prohlášení.

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

Následující příklad je skript, který umožňuje uživateli vybrat barvu a zobrazuje komentář odpovídající vstupu pomocí příkazu echo.

Postupujte podle pokynů níže:

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

vi color.sh

2. Přidejte do skriptu následující řádky:

#!/bin/bash
echo "Which color do you like best?"
echo "1 - Blue"
echo "2 - Red"
echo "3 - Yellow"
echo "4 - Green"
echo "5 - Orange"
read color;
case $color in
  1) echo "Blue is a primary color.";;
  2) echo "Red is a primary color.";;
  3) echo "Yellow is a primary color.";;
  4) echo "Green is a secondary color.";;
  5) echo "Orange is a secondary color.";;
  *) echo "This color is not available. Please choose a different one.";; 
esac

Každý z řádků má následující roli:

  • První řádek v každém skriptu je obvykle shebang (#! ), který dá operačnímu systému pokyn, který interpret má použít k analýze souboru.
  • Řádky 2–7 představují nabídku možností, ze které si uživatel může vybrat.
  • read color; proměnná vyzve uživatele k odpovědi a uloží ji.
  • Případ case obsahuje možné odpovědi, které odpovídají zadání uživatele. V tomto příkladu je výstupem echo výstup příkazu.
  • Poslední řádek, esac , ukončí case prohlášení.

3. Uložte skript a ukončete vi pomocí následujícího příkazu:

:wq

4. Před spuštěním každého skriptu se ujistěte, že jste jej upravili tak, aby byl spustitelný:

chmod +x color.sh

5. Spusťte skript:

./color.sh

Skript nabízí nabídku možností a vydává různé zprávy v závislosti na vybrané možnosti.

Příklad 2:Použití více vzorů

case příkaz umožňuje použití více vzorů v každé klauzuli. Pokud výraz odpovídá zadaným vzorům, skript provede příkazy v této klauzuli.

Tento ukázkový skript vyzve uživatele k zadání měsíce a vypíše počet dní. Existují tři možné odpovědi:

  • 30 dní.
  • 31 dní.
  • 28 nebo 29 dní na únor.

Pro vytvoření skriptu postupujte podle následujících kroků:

1. Vytvořte skript month.sh spuštěním:

vi month.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
shopt -s nocasematch
echo "Enter the name of a month."
read month
case $month in
  February)
 
echo "There are 28/29 days in $month.";;
  April | June | September | November)
echo "There are 30 days in $month.";;
  January | March | May | July | August | October | December)
echo "There are 31 days in $month.";;
  *)
echo "Unknown month. Please check if you entered the correct month name: $month";;
esac

Ve výše uvedeném příkladu:

  • shopt pomocí příkazu -s nocasematch možnost snižuje šanci na chybu, protože při shodě vzorů se nerozlišují velká a malá písmena.
  • Symbol potrubí | odděluje vzory v každé z vět.

3. Nastavte skript jako spustitelný:

chmod +x month.sh

4. Spusťte skript:

./month.sh

Skript ignoruje rozdíly ve velikosti písmen a vypíše správný počet dní ve vybraném měsíci.

Příklad 3:pro smyčky

Použijte for smyčka v case příkazy, kdy je potřeba zpracovat mnoho výrazů. Následující skript vrací všechny typy souborů z adresáře.

Postupujte podle následujících kroků:

1. Vytvořte skript shellu:

vi filelist.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
for file in $(ls)
do
Extension=${file##*.}
case "$Extension" in
  sh) echo "Shell script: $file";;
  md) echo "A markdown file: $file";;
  png) echo "PNG image file: $file";;
  txt) echo "A text file: $file";;
  zip) echo "An archive: $file";;
  conf) echo "A configuration file: $file";;
  py) echo "A Python script: $file";;
  *) echo "Unknown file type: $file";;
esac
done

Ve výše uvedeném příkladu:

  • ls příkaz vytáhne seznam souborů z adresáře.
  • Položka for loop použije globování souborů k extrahování přípon každého souboru.

3. Nastavte skript jako spustitelný:

chmod +x filelist.sh

4. Spusťte skript:

./filelist.sh

Skript identifikuje každý typ souboru přítomný v aktuálním adresáři.

Příklad 4:Vytvoření adresáře

Použijte case vytvořit jednoduchou databázi a rychle vygenerovat požadované informace. Následující příklad vypíše jméno, e-mailovou adresu a adresu vybrané osoby:

1. Vytvořte skript:

vi phonebook.sh

2. Přidejte následující řádky a uložte skript:

#!/bin/bash
echo "Choose a contact to display information:"
echo "[C]hris Ramsey"
echo "[J]ames Gardner"
echo "[S]arah Snyder"
echo "[R]ose Armstrong"
read person
case "$person" in
  "C" | "c" ) echo "Chris Ramsey"
echo "[email protected]"
echo "27 Railroad Dr. Bayside, NY";;
  "J" | "j" ) echo "James Gardner"
echo "[email protected]"
echo "31 Green Street, Green Cove Springs, FL";;
  "S" | "s") echo "Sarah Snyder"
echo "[email protected]"
echo "8059 N. Hartford Court, Syosset, NY";;
  "R" | "r") echo "Rose Armstrong"
echo "[email protected]"
echo "49 Woodside St., Oak Forest, IL";;
  *) echo "Contact doesn't exist.";;
esac

3. Upravte skript:

chmod +x phonebook.sh

3. Spusťte skript:

./phonebook.sh

Skript vypíše kontaktní údaje na vybranou osobu. Výběr možnosti, která není uvedena, upozorní uživatele, že kontakt neexistuje.

Příklad 5:Zkontrolujte typ znaku

Následující příklad ukazuje, jak používat case pro kontrolu, jaký typ znaku uživatel zadal.

Postupujte podle následujících kroků:

1. Vytvořte skript:

vi character.sh

2. Přidejte následující řádky a uložte skript:

#!/bin/bash
echo "Enter a character:"
read var
case $var in
  [[:lower:]) echo "You entered a lowercase character.";;
  [[:upper:]]) echo "You entered an uppercase character.";;
  [0-9]) echo "You entered a digit.";;
  ?) echo "You entered a special character.";;
  *) echo "You entered multiple characters.";;
esac

Ve výše uvedeném příkladu:

  • $var řídicí proměnná ukládá vstup.
  • Namísto psaní všech možných kombinací použijte hranaté závorky [] k označení rozsahu znaků. Použijte dvojité hranaté závorky [[]] pro rozsahy POSIX. if-else vyžaduje zadání každé podmínky znaku samostatně.
  • ? znak zakrývá znaky, které nejsou malými písmeny, velkými písmeny nebo číslicemi. Nahrazuje pouze jeden znak, na rozdíl od * který nahrazuje vše ostatní, na co se nevztahují výše uvedené podmínky.

3. Změňte oprávnění, aby byl skript spustitelný:

chmod +x character.sh

4. Spusťte skript:

./character.sh

Výstup uvádí typ zadaného znaku po jeho porovnání se zadanými podmínkami.


Linux
  1. Bash pro průvodce smyčkou a příklady

  2. Bash If-Else prohlášení s příklady

  3. Příklady Bash for Loop a While Loop

  1. Jak programovat s Bash:Syntaxe a nástroje

  2. Příkaz Linux AWK – Příklady syntaxe použití Linuxu a Unixu

  3. 4 Příklady příkazů Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  1. Bash deklarovat Příkaz:Syntaxe a příklady

  2. 4 Příklady prohlášení Awk If ( if, if else, if else if, :? )

  3. 5 Příklady prohlášení o případu Bash