GNU/Linux >> Znalost Linux >  >> Linux

Porozumění Bash If Else a dalším podmíněným prohlášením

Pokud jste někdy napsali skript Bourne Again Shell (Bash), víte, že se mohou rychle stát složitými, když jim přidáte více logiky. Jak se vyhnout zpackání skriptů? Podmíněné příkazy, jako Bash if else, jsou jedním ze způsobů, jak přidat logiku a umožnit vašemu skriptu rozhodovat se na základě určitých podmínek.

V tomto tutoriálu se naučíte, jak používat Bash if-else a příkazy case k psaní bezchybného Bash skriptu. To vše s některými osvědčenými postupy pro psaní skriptů Bash.

Připraveni? Čtěte dál a posuňte své skriptování v Bash na další úroveň!

Předpoklady

Tento tutoriál bude praktickou ukázkou. Pokud je chcete sledovat, ujistěte se, že máte

  • Systém Linux nebo Windows s nainstalovaným Bash – Windows Subsystem for Linux (WSL) je vynikající volbou pro uživatele Windows.
  • Kódový/textový editor.

Proč používat podmíněné příkazy?

Podmíněné příkazy jsou jedním z nejdůležitějších nástrojů ve skriptování Bash, protože vám umožňují rozhodovat se ve skriptech na základě určitých podmínek.

Podmíněný příkaz můžete například použít ke kontrole, zda soubor existuje, než se jej pokusíte odstranit. Nebo jej můžete použít ke kontrole, zda má uživatel oprávnění k přístupu k určitému zdroji.

Díky podmíněným příkazům jsou vaše skripty flexibilnější a výkonnější. Představte si, že píšete skript pro odstranění všech souborů v adresáři. Pomocí podmíněného příkazu můžete odstranit soubory, které jsou starší než 30 dní.

Porozumění příkazu IF

Dost úvodu do Bash skriptu a ušpiněte si ruce. Podívejte se blíže na jeden z nejpopulárnějších podmíněných příkazů, if prohlášení.

if příkaz je nejzákladnějším způsobem, jak přidat podmínky do vašich skriptů Bash, s následující syntaxí:

  • Počínaje klíčovým slovem if určíte [[podmínky]], které je třeba splnit. Kód uvnitř příkazu if se poté spustí a příkaz skončí klíčovým slovem fi.
  • Klíčové slovo then odděluje podmínku od kódu (příkazu), který se spustí, pokud je podmínka splněna. Tento kód může být dlouhý více řádků, pokud jako oddělovač řádku připojíte středník (;).
if [[ condition ]]; then
	statement
fi

Předpokládejme, že vytváříte skript, který před přihlášením požaduje správné uživatelské jméno pro váš systém:

1. Otevřete svůj terminál a vytvořte nový bash_if_demo.sh pomocí vámi zvoleného textového editoru.

nano bash_if_demo.sh

2. Zkopírujte a vložte následující kód do bash_if_demo.sh soubor, uložte změny a zavřete soubor.

Níže uvedený kód vyžaduje uživatelské jméno, a pokud je zadáno správné, kód vytiskne zprávu „vítejte zpět“ spolu s aktuálním datem a časem.

Pro další analýzu můžete zaznamenat datum a čas, kdy se uživatel pokouší o přístup do systému.

První řádek #!/bin/bash (shebang) říká systému, který interpret použít ke spuštění zbytku kódu v souboru. V tomto případě používáte bash.

#!/bin/bash
# Prints a question to the screen.
echo "Whats your name?"
# Reads keyboard input and stores it in the $NAME variable
read NAME
# Starts the if statement - checks to see if the $NAME variable's value 
# is equal to ATA. If it is, the code inside runs. Otherwise, the code will not run.
if [ $NAME == "ATA" ]
then
	# Prints a message to the screen, only if the value stored in the $NAME variable 
	# is equal to ATA.
  echo "Welcome back ATA!"
fi
# Prints the current date and time to the screen. Since this line is outside 
# of the if statement, it always runs regardless of the $NAME variable's value.
date

3. Nakonec spusťte níže uvedený příkaz a spusťte skript bash_if_demo.sh, abyste viděli, co dělá.

bash bash_if_demo.sh

Upozorňujeme, že ať už používáte jakýkoli Bash shell, musíte před název skriptu přidat bash, aby systém použil Bash ke spuštění vašeho kódu.

Zadejte ATA a poté stiskněte Enter a uvidíte následující výstup.

Uvítací zprávu neobdržíte, pokud zadáte cokoliv jiného než „ATA.“, pouze aktuální datum a čas. Proč? Protože váš příkaz if kontroluje přesnou hodnotu, jako je ta uložená v proměnné $NAME.

Všimněte si, že příkazy if rozlišují velká a malá písmena. Takže „ata“, „aTa“, „Ata“ atd. nejsou totéž jako „ATA.“

Otestování kódu pomocí různých vstupů je nejlepším postupem, abyste se ujistili, že se kód chová podle očekávání.

Porozumění vnořeným příkazům If

Právě jste se naučili základy psaní příkazů if, a to je dost dobré, pokud nepíšete složitý kód. Ale pokud to uděláte, zkuste napsat vnořený příkaz if, abyste rozšířili své podmíněné příkazy. Vnořený příkaz if je příkaz if, který obsahuje jeden nebo více příkazů if.

Níže je uvedena základní syntaxe pro vnořené příkazy if, kde:

  • if [[ conditions ]] – Vnější if příkaz obsahující kód, který se spustí, pouze pokud je splněna podmínka. V tomto případě další if prohlášení).
  • if [[ condition2 ]] – Vnitřní if příkaz obsahující kód, který se spustí, pouze pokud jsou splněny obě podmínky.
if [[ conditions

]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Posuňte předchozí kód o stupeň výš nastavením if příkaz, který požaduje heslo:

1. Vytvořte nový soubor s názvembash_nested_if_demo.sh pomocí textového editoru.

nano bash_nested_if_demo.sh

2. Vyplňte níže uvedený kód do bash_nested_if_demo.sh soubor, uložte změny a zavřete soubor.

Níže uvedený kód vyžaduje jméno a heslo. Pokud jsou splněny obě podmínky pro jméno a heslo, kód vytiskne zprávu. Pokud ne, kód nevytiskne žádné zprávy kromě aktuálního data a času.

#!/bin/bash
# Prints a message asking for a name.
echo "Whats your name?"
# Reads input from the keyboard.
read NAME
# Check if the $NAME variable's value is equal to "ATA."
if [ $NAME == "ATA" ]
 then
 # Prints a message asking for a password.
 echo "Password"
 # Reads input from the keyboard.
 read Password
   # Nested if statement - Check if the $Password variable's value equals "pwd123."
   if [ "$Password" == "pwd123" ]; then
     # Prints a message if both conditions for name and password are met.
     echo "You logged in as ATA"
   fi
fi
# Prints the current date and time
date

3. Nakonec spusťte níže uvedený příkaz a spusťte bash_nested_if_demo.sh skript.

bash bash_nested_if_demo.sh

Zadejte ATA pro jméno a pwd123 pro heslo.

Pokud zadáte cokoliv jiného než „ATA“ nebo „pwd123“, zobrazí se vám pouze aktuální datum a čas. Proč? Musí být splněny obě podmínky ve vnořených příkazech if.

Pochopení příkazů IF ELSE

Příkaz if je mocný a běžně používaný nástroj ve skriptování Bash. jestliže příkazy mohou pomoci při rozhodování ve vašich skriptech. Ale stojí za zmínku, že používání příkazů if má určité nevýhody.

Hlavní nevýhodou je, že příkazy if mohou znesnadnit čtení a údržbu vašeho kódu, zvláště pokud jste příkazy if vnořili do jiných příkazů if. Tento styl skriptování může vést k tomu, co je známé jako „kód špaget“ – obtížně čitelný a pochopitelný.

Jak tedy zajistit, aby váš kód nevypadal složitě? Použijte příkaz if else namísto hromady vnořených příkazů if. Klíčové slovo else vám umožňuje zadat kód, který se spustí, pokud není splněna podmínka v příkazu if.

Podívejte se na syntaxi příkazu IF ELSE níže, kde:

  • if [[ conditions ]]if příkaz, který obsahuje kód (statement1 ), který se spustí, pokud je splněna podmínka.
  • elseelse výpis obsahuje kód (statement2 ), který se spustí, pokud je splněna podmínka v if prohlášení není splněno.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Předpokládejme, že vytváříte číselnou hru, která zadává náhodné číslo jako vstup od uživatele:

1. Vytvořte nový soubor s názvem bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Přidejte následující kód do bash_if_else_demo.sh soubor, uložte změny a zavřete soubor.

Níže uvedený kód vytiskne zprávu s žádostí o zadání šťastného čísla uživatele a vytiskne zprávu You Won, pokud uživatel zadá sudé číslo. V opačném případě (jinak) kód vytiskne zprávu Ztratili jste, pokud uživatel zadá liché číslo.

#!/bin/bash
# Prints a message asking for the user's lucky number
echo -n "Enter You Lucky Number:"
# Reads the keyboard input.
read var
# Checks if the value is an even number.
if [ $((var%2)) == 0 ]; then
 # Prints a message if the condition is met
 echo "You Won!"
else
 # Prints a message if the condition is not met
 echo "You Lost!"
fi

3. Nyní spusťte následující příkaz a spusťte skript bash_if_else_demo.sh.

bash bash_if_else_demo.sh

Pokud zadáte sudé číslo, zobrazí se zpráva „Vyhráli jste!“ tisky, jak můžete vidět níže. Pokud však zadáte liché číslo, zobrazí se zpráva „Ztratili jste!“ místo toho vytiskne.

Zkuste vylepšit svůj kód přidáním dalšího příkazu, který zkontroluje, zda uživatel místo toho zadá písmeno speciálního znaku.

Porozumění prohlášení k případu

Doposud jste se dívali na dva způsoby rozhodování ve skriptech Bash:if příkazy a else prohlášení. Ve skriptech však existuje další způsob rozhodování, case prohlášení.

case příkaz je podobný if příkaz, protože vám umožňuje určit kód, který bude spuštěn na základě podmínky. Ale dobrá věc na příkazu case je, že budete mít přesnější a stručnější syntaxi než vnořený if prohlášení.

Syntaxe příkazu case je následující, kde:

  • case $VAR incase příkaz, který přebírá $VAR proměnná testuje proti vzorům, které určíte, dokud není nalezena shoda.
  • pattern1) a pattern2) -Vzory k testování, které spouští kód (statement1 nebo statement2 ), jakmile je vzor nalezen.
  • esac – Ukončí výpis případu.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Předpokládejme, že potřebujete skript, který žádá uživatele, aby zadali názvy zemí a odpověděli zprávou zobrazující jazyk, kterým se v dané zemi mluví.

1. Vytvořte nový soubor s názvem bash_case_demo.sh.

nano bash_case_demo.sh

2. Vyplňte níže uvedený kód do bash_case_demo.sh soubor, uložte změny a zavřete soubor.

Níže uvedený kód požádá uživatele o název země a vytiskne oficiální jazyk této země na základě vzorů v prohlášení o případu.

3#!/bin/bash
# Prints a message asking for the user's country name
echo -n "Enter the Country You Live In:"
# Reads keyboard input.
read var
# Prints a message showing the official language in the user's country ($var)
# based on the pattern in the case statement.
echo -n "The official language of $var is "

# Case statement - checks if the user's input ($var) matches the patterns.
case $var in
# Define patterns that print the user's country's official language.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English | French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Nakonec spusťte následující příkaz a spusťte skript bash_case_demo.sh.

bash bash_case_demo.sh

Níže vidíte, že se vytiskne příslušný úřední jazyk v závislosti na zemi, kterou uživatel zadal.

Pokud zadaná země neodpovídá žádnému ze vzorů, použije se výchozí vzor (*) a vytiskne se neznámá zpráva.

Závěr

V tomto tutoriálu jste udělali první kroky k tomu, abyste se naučili používat podmíněné příkazy v Bash. Naučili jste se zjednodušit složitý kód pomocí příkazů Bash if, if-else a case.

Nyní jste dostatečně sebevědomí, abyste mohli používat podmíněné příkazy k efektivnějšímu psaní Bash skriptů a s menším počtem chyb.

Ale nezastavujte se zde! Podmíněné příkazy v Bash mohou nabídnout více věcí. Možná se začněte učit o příkazu Bash elif a &&, OR a || operátory? S trochou cviku budete psát Bash skripty jako profesionál během okamžiku!


Linux
  1. Jak používat příkaz if else Conditionals ve skriptu Bash

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

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

  1. 2>&1 a porozumění dalším idiomům shell skriptu

  2. Rozumíte Tc Qdisc a Iperf?

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

  1. Prohlášení Bash if elif else:Komplexní návod

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

  3. Bash case Syntaxe a příklady