V předchozím článku jsme viděli, jak pracovat s podmíněnými příkazy v bash pro vyhodnocení podmínek a rozhodování na základě výsledků. Podobně se v tomto článku naučíme, jak používat case statement ve skriptech Bash, který se také používá k vyhodnocování podmínek. Místo psaní dlouhého seznamu if..elif..else
můžete použít Bash case. prohlášení. Pokud o podmíněných příkazech nemáte ponětí, máme na toto téma podrobný článek. Doporučuji, abyste se na něj podívali, než si přečtete tento článek.
- Skriptování Bash – podmíněné příkazy
Syntaxe příkazu Case
Syntaxe příkazu case v bash je uvedena níže:
case expression in pattern1) STATEMENTS ;; pattern2) STATEMENTS ;; Pattern3 | Pattern4 | pattern5) STATEMENTS ;; pattern-N) STATEMENTS ;; *) STATEMENTS ;; esac
Vysvětlení:
- Klíčové slovo
"case"
a"esac"
označuje začátek a konec případu. - Za malými a velkými písmeny by měl následovat
"expression"
. Tento výraz bude vyhodnocen a výstup bude prohledán proti seznamu vzorů. - Za výrazem
"in"
klíčové slovo by mělo být zapsáno, které ukazuje na"value in patterns"
. - Můžete vytvořit tolik vzorů, kolik chcete. Každý vzor si můžete představit jako
if
aelif
klauzule v podmíněném příkazu. Pokud se hodnota vyhodnocená z výrazu shoduje se vzorem, tento vzor spustí svůj blok kódu. Zbývající vzory budou přeskočeny. - Každý příkaz uvnitř vzoru by měl být ukončen dvojitým středníkem (
;;
). - Podobně jako klauzule else v příkazu if, i v příkazu case existuje výchozí vzor nazvaný hvězdičky (
*
), který spustí svůj blok kódu, pokud se žádný ze vzorů neshoduje.
Příklad 1 – Kalkulačka s použitím případu
V tomto příkladu jsem vytvořil jednoduchou kalkulačku pomocí případu. Dovolte mi vysvětlit, co se stane, když spustíte tento kód.
- Uživatel je vyzván k zadání dvou čísel a je uložen v proměnných
"X"
a"Y"
. - Uživatel je vyzván k zadání typu operace (sčítání, odečítání, násobení, dělení) a je uložen do proměnné "OPERÁTOR" .
- V případě uveďte proměnnou "OPERATOR" se hodnotí a různé vzory (
+
,-
,x
,/
,%
) jsou vytvořeny pro různé operace. - Pokud se vzor shoduje, konkrétní vzor spustí svůj příkaz a přeskočí všechny ostatní vzory v příkazu case.
- Pokud se pokusíte zadat jiné hodnoty než požadované aritmetické operátory, pak výchozí vzor (
*
) spustí svůj příkaz.
#!/usr/bin/env bash read -p "Enter the first number(X) : " X read -p "Enter the second number(Y) : " Y read -p " Addition => + Subtract => - Multiply => x Division => / Reminder => % Choose any one operator : " OPERATOR case "$OPERATOR" in +) echo -e "\nAddition of X and Y is $(( X + Y ))" ;; -) echo -e "\nSubtraction of X and Y is $(( X - Y ))" ;; x) echo -e "\nMultiply X and Y is $(( X * Y ))" ;; /) echo -e "\nDivision of X and Y is $(( X / Y ))" ;; %) echo -e "\nReminder of X and Y is $(( X % Y ))" ;; *) echo -e "\n[ERROR] You have chosen an operator that is not in the list. You can choose either(+, -, x, /, %) operator from the list. Rerun the program again." esac
Podívejte se na obrázek níže, odesílám kód a vybírám "Operátor přidání" .
Znovu spouštím stejný kód, ale tentokrát dávám náhodnou hodnotu, která vytvoří výchozí vzor (*
) spusťte svůj příkaz.
Příklad 2 – Vytvoření více vzorů v jedné klauzuli
V předchozím příkladu jsme vytvořili různé vzory pro různé aritmetické operátory. Je také možné vytvořit více vzorů ve stejné klauzuli, a pokud se některý ze vzorů shoduje, spustí se konkrétní příkaz. Syntaxe bude stejná, ale přidáte rouru symbol (|
) a přidejte různé vzory do stejného řádku jako níže.
case expression in Pattern1 | Pattern2 | pattern3) STATEMENTS ;; *) STATEMENTS ;; esac
V níže uvedeném příkladu uživatel zadá jako vstup rok a z dat IPL získá podrobnosti o oranžovém uzávěru. V letech 2015, 2017 a 2019 stejný hráč vyhrál oranžovou čepici, takže jsem vytvořil jiný rok jako vzor ve stejné klauzuli.
read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP case "$CAP" in 2015 | 2017 | 2019) echo -e "\nOrange cap winner for $YEAR is David Warner" ;; 2016) echo -e "\nOrange cap winner for $YEAR is Virat Kohli" ;; 2018) echo -e "\nOrange cap winner for $YEAR is Kane Williamson" ;; 2020) echo -e "\nOrange cap winner for $YEAR is KL Rahul" ;; 2021) echo -e "\nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;; *) echo -e "\n[ERROR] Enter the year between 2015 - 2021." esac
Příklad 3 – Shoda vzoru v příkazu case
Shoda podle vzoru lze použít v případě prohlášení. Používám stejný příklad z předchozí části, ale přidávám další vzor (20[2-9][2-9])
kde pokud uživatel zadá jakýkoli rok nad rokem 2021, vytiskne zprávu, že „seriál se teprve uskuteční“.
read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP case "$CAP" in 2015 | 2017 | 2019) echo -e "\nOrange cap winner for $YEAR is David Warner" ;; 2016) echo -e "\nOrange cap winner for $YEAR is Virat Kohli" ;; 2018) echo -e "\nOrange cap winner for $YEAR is Kane Williamson" ;; 2020) echo -e "\nOrange cap winner for $YEAR is KL Rahul" ;; 2021) echo -e "\nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;; 20[2-9][2-9]) echo -e "\nSeries is yet to happen for the year $CAP" ;; *) echo -e "\n[ERROR] Enter the year between 2015 - 2021." esac
Příklad 4 – Získejte potvrzení uživatele
Někdy můžete vyžadovat, aby uživatel poskytl potvrzení, aby mohl přejít k dalšímu kroku ve vašem programu. Použití případu by bylo dobrou volbou pro tento případ použití.
V předchozím příkladu je vzor zapsán na jeden řádek a příkazy na jiný řádek, ale můžete také psát vzory a příkazy na jeden řádek, jak je znázorněno níže.
read -p "Input file is received in CSV format, Please confirm to load the data into production database : " CONFIRM case "$CONFIRM" in [Yy] | [Yy][Ee][Ss] ) echo "++ Running the utility to load the data to the database.." ;; [Nn] | [Nn][Oo] ) echo -e "++ Skipping load db step upon user confirmation..\n Exiting the script.." ;; *) echo -e "[ERROR] = Wrong Input, Exiting the script.." esac
Příklad 5 – Příkaz případu s návratovými kódy
Můžete napsat logiku pro zachycení návratového kódu dříve spuštěného příkazu a provést některé akce pomocí příkazů case. Vytvářím dialogové okno GUI pro přijetí uživatelského jména a hesla od uživatele pomocí zenity . Pokud uživatel odešle uživatelské jméno a heslo úspěšně, zeity vyhodí návratový kód jako nulu a na základě toho jsem přidal logiku pro přidání nového uživatele. Cokoli jiného než nula, bude vyvolána chybová zpráva.
INFO=$(zenity --password --username) case $? in 0) USERNAME=$(echo ${INFO} | awk -F "|" '{ print $1 }') PASSWORD=$(echo ${INFO} | awk -F "|" '{ print $2 }') useradd -m -p "${PASSWORD}" "${USERNAME}" ;; *) echo "[ERROR] - User not added." esac
Stiskl jsem tlačítko Zrušit v dialogovém okně, takže mi to vyvolalo chybu s použitím výchozího vzoru (*
).
Doporučené čtení:
- Jak vytvořit dialogová okna GUI ve skriptech Bash pomocí Zenity v Linuxu a Unixu
Referenční skripty
Chcete-li se lépe orientovat v příkazech případu, můžete se podívat na existující kódy napsané pomocí příkazů případu. Lepší místo pro začátek by bylo čtení spouštěcích skriptů v /etc/init.d
adresář. Například mám na svém počítači nainstalovaný virtualbox a ten má spouštěcí soubor pod /etc/init.d
adresář. Existuje část kódu, která je napsána pomocí příkazu case, který poskytne dobrou představu o tom, jak příkaz case funguje.
$ cd /etc/init.d/
$ cat bluetooth
Závěr
V tomto článku jsme viděli, co je to case statement v Bash a různé způsoby, jak jej používat. Jak podmíněné prohlášení, tak prohlášení o případu slouží stejnému účelu. Měli byste lépe porozumět tomu, která metoda odpovídá případu použití. Příkazy Case se také použijí, když musíte vytvořit funkce nápovědy pomocí getopt
a getopts
programy. Vytvořte skript a začněte procvičovat příklady, které jsme zde uvedli, abyste pochopili více o případových prohlášeních.
Příručky skriptování Bash:
- Skriptování Bash – podmíněné příkazy
- Bash Scripting – manipulace s řetězci
- Skriptování Bash – příkaz Printf s příklady
- Skriptování Bash – indexované pole s příklady
- Bash Scripting – Asociativní pole vysvětleno s příklady
- Bash Scripting – pro smyčku vysvětlenou s příklady
- Bash Scripting – smyčka Zatímco a dokud není vysvětlena příklady
- Přesměrování Bash vysvětleno na příkladech
- Bash Scripting – proměnné vysvětlené na příkladech
- Bash Scripting – funkce vysvětlené na příkladech
- Příkaz Bash Echo vysvětlený s příklady v Linuxu
- Výukový program Bash Heredoc pro začátečníky