GNU/Linux >> Znalost Linux >  >> Linux

Bash Scripting – Case Statement

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í:

  1. Klíčové slovo "case" a "esac" označuje začátek a konec případu.
  2. 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ů.
  3. Za výrazem "in" klíčové slovo by mělo být zapsáno, které ukazuje na "value in patterns" .
  4. Můžete vytvořit tolik vzorů, kolik chcete. Každý vzor si můžete představit jako if a elif 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.
  5. Každý příkaz uvnitř vzoru by měl být ukončen dvojitým středníkem (;; ).
  6. 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.

  1. Uživatel je vyzván k zadání dvou čísel a je uložen v proměnných "X" a "Y" .
  2. 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" .
  3. V případě uveďte proměnnou "OPERATOR" se hodnotí a různé vzory (+ ,- ,x ,/ ,% ) jsou vytvořeny pro různé operace.
  4. Pokud se vzor shoduje, konkrétní vzor spustí svůj příkaz a přeskočí všechny ostatní vzory v příkazu case.
  5. 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

Linux
  1. Bash skriptování (I)

  2. Příkaz blokuje mechanismus ve skriptování Shell?

  3. Použití případových prohlášení v Bash

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

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

  3. Bash/sh příkaz „jestli je to jinak“.

  1. Bash case Syntaxe a příklady

  2. Bash pokračovat:Jak obnovit smyčku

  3. Existuje příkaz goto v bash?