GNU/Linux >> Znalost Linux >  >> Linux

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

Úvod

Bash skripty pomáhají automatizovat úlohy na vašem počítači. if elif else příkaz v bash skriptech umožňuje vytvářet podmíněné případy a odpovědi na konkrétní výsledky kódu. if podmíněné pomáhá automatizovat rozhodovací proces během programu.

Tento článek vysvětluje, co je if elif else příkaz je a ukazuje syntaxi prostřednictvím různých příkladů.

Předpoklady

  • Počítač s operačním systémem Linux.
  • Přístup k příkazovému řádku/terminálu.
  • Přístup k textovému editoru, jako je Vi/Vim.

Co je to příkaz Bash if?

V programování if příkaz je podmíněný výraz. Příkaz však testován v if příkaz vyhodnotí na základě stavu ukončení . Proto:

  • Pokud se příkaz dokončí úspěšně , stav ukončení je 0 .
  • Pokud příkaz vyvolá chybu , stav ukončení je libovolné číslo mezi 1 a 255 .

Nula pro úspěch a jakákoli nenulová hodnota pro neúspěch se zdá být kontraintuitivní. Ve většině ostatních programovacích jazyků nula představuje nepravdu a jedna (nebo větší) představuje pravdu. Ve skriptování bash však konvence UNIX vrací stav ukončení místo pravdivé hodnoty a tyto dvě hodnoty by se neměly zaměňovat.

Otestujte ukázkový chybový příkaz (1 větší než 100) v terminálu spuštěním:

test 1 -gt 100

Zkontrolujte stav ukončení pomocí příkazu echo:

echo $?

Test vrátí návratový kód 1 , což znamená, že výraz se nezdařil.

Podobně zkontrolujte vzorový příkaz, který se úspěšně vyhodnotí (1000 větší než 100) v terminálu pomocí:

test 1000 -gt 100

Vytiskněte stav ukončení, abyste potvrdili, že příkaz byl úspěšný:

echo $?

Test vrátí návratový kód 0 , zobrazující příkaz dokončený bez chyby.

Příklad příkazu Bash if

Podle pokynů níže vytvořte příklad bash skriptu pomocí if prohlášení.

1. Otevřete terminál (CTRL +ALT +T ) a vytvořte ukázkový skript, který otestuje, jak bash if výpis funguje:

vi test_script.sh

2. Do skriptu přidejte následující řádky:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if test $VAR -gt 100
then
        echo "It's greater than 100"
fi
echo Bye!

Každý řádek ve skriptu dělá následující:

  • Řádky 1–3 poskytnout pokyny k zadání čísla prostřednictvím konzoly. Číslo se načte do proměnné s názvem VAR a vytištěné.
  • Řádek 4 spustí if a zkontroluje stav ukončení pro příkaz hned po ($VAR -gt 100 ).
  • Řádky 5–6 signalizuje spuštění příkazů, které se mají provést, pouze pokud se příkaz na řádku 4 úspěšně dokončí (se stavem ukončení 0), což znamená, že jsme zadali číslo větší než 100.
  • Řádek 7 signalizuje konec if prohlášení.
  • Řádek 8 je mimo příkaz a běží podle očekávání, bez ohledu na if výsledek.

3. Uložte a zavřete Vim:

:wq

4. Dále udělejte soubor jako spustitelný:

chmod +x test_script.sh

5. Nakonec spusťte skript pomocí:

./test_script.sh

Skript vypíše na základě zadaného čísla jinou zprávu. Spusťte skript několikrát a otestujte další čísla, abyste potvrdili chování.

Syntaxe příkazu Bash if

Základní syntaxe bash if prohlášení je:

if <commands>
then
        <commands>
fi

Každé klíčové slovo má specifickou funkci:

  • if signalizuje začátek prohlášení. Příkaz hned za je ten, na který se vztahuje kontrola stavu ukončení.
  • then provede příkazy pouze v případě, že předchozí kontrola byla úspěšně dokončena.
  • fi zavře příkaz if.

Uzavření příkazu test do různých hranatých závorek má za následek různé metody provádění pro if prohlášení. Níže uvedená tabulka poskytuje krátký popis a také případ použití pro každý typ závorky.

Syntaxe Co to je Kdy použít
if ( <commands> ) Podshell spuštěný v dílčím procesu. Když příkazy ovlivňují aktuální shell nebo prostředí. Po dokončení subshell změny nezůstanou.
if (( <commands> )) Rozšíření Bash. Použití pro aritmetické operace a manipulaci s proměnnými ve stylu C.
if [ <commands> ] Vestavěný POSIX, alias pro test <commands> . Porovnání čísel a testování, zda soubor existuje.
if [[ <commands> ]] Rozšíření Bash, pokročilá verze jednoduchých hranatých závorek. Řetězec odpovídající vzoru zástupných znaků.

Níže jsou uvedeny příklady bash skriptů, které používají každý typ závorky s podrobnějším vysvětlením.

Syntaxe s jednou závorkou

Použití jednoduchých závorek ve skriptování bash vytvoří subshell. V kombinaci s if podproces skončí před pokračováním v programu. if analyzuje stav odchodu a podle toho jedná.

Bash if syntaxe příkazu s jednoduchými závorkami vypadá takto:

if ( <commands> )
then
        <commands>
fi

Vyzkoušejte níže uvedený příklad, abyste viděli, jak se podproces chová společně s if prohlášení:

1. Vytvořte skript pomocí Vim:

vi single_parentheses.sh

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

outer_variable=Defined
echo Before if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
        echo Inside subshell:
        inner_variable=Defined
        echo inner_variable = $inner_variable
        outer_variable=Changed
        echo outer_variable = $outer_variable
)
then
        echo After then:
        echo inner_variable = $iner_variable
        echo outer_variable = $outer_variable
fi
echo After fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable

Program provede následující:

  • Řádek 1 vytvoří proměnnou s názvem outer_variable ve kterém ukládáme řetězec Defined .
  • Řádky 2–4 vytisknout proměnné do konzole. V tuto chvíli outer_variable má v sobě uložený řetězec, zatímco inner_variable je prázdné.
  • Řádek 5 spustí if příkaz a podproces ohraničený jednou závorkou.
  • Řádek 6–11 uložit řetězec do inner_variable a změňte outer_variable na jiný řetězec. Obě hodnoty se vytisknou do konzoly a dílčí proces končí ukončovacím kódem. V tomto případě dílčí proces úspěšně končí s kódem ukončení 0 .
  • Řádek 12–16 spustit po dílčím procesu a vytisknout hodnoty proměnných. Hodnoty se však změní zpět na to, co byly před if prohlášení. Dílčí proces ukládá hodnoty pouze lokálně, nikoli globálně.
  • Řádky 16–19 spustit po příkazech v then doložka. Hodnoty zůstávají mimo příkaz nezměněny.

3. Uložte skript a zavřete editor:

:wq

4. Nastavte skript jako spustitelný:

chmod +x single_parentheses.sh

5. Nakonec spusťte příklad a otestujte výsledky:

./single_parentheses.sh

Výstup vypíše stavy proměnných v průběhu programu.

Syntaxe dvojitých závorek

Syntaxe dvojitých závorek pro bash if prohlášení je:

if (( <commands> ))
then
        <commands>
fi

Konstrukce dvojitých závorek v bash umožňuje:

  • Aritmetické vyhodnocení . Definování proměnné jako a=$(( 1+1 )) vypočítá rovnici a nastaví a do 2.
  • Manipulace s proměnnými ve stylu C. Například zvýšení proměnných pomocí (( a++ )) .

Při použití syntaxe dvojitých závorek v if prohlášení se hodnocení chová jinak. Předpokládejme, že se výraz vyhodnotí jako 0 a poté if test neprojde.

Vyzkoušejte následující příklad, abyste viděli, jak fungují dvojité závorky:

1. Vytvořte bash skript v terminálu:

vi double_parentheses.sh

2. Přidejte následující kód do double_parentheses.sh :

variable=-2
echo Before first if: $variable
if (( variable++ ))
then
        echo Incremented ++ style: $variable
fi
echo After first if: $variable
if (( variable=variable+1 ))
then
        echo Incremented arithmetically $variable
fi
echo After second if: $variable

Každé číslo řádku ve skriptu dělá následující:

  • Řádek 1 definuje proměnnou a nastavuje hodnotu na -2 .
  • Řádky 3–5 zvýší hodnotu ve stylu C uvnitř dvojitých závorek a zkontroluje hodnotu. Pokud proměnná není nula, if vypíše zprávu do konzole.
  • Řádky 8–10 zvýší proměnnou o jednu pomocí běžného aritmetického zápisu a vypíše zprávu, pokud proměnná není nula.

3. Uložte skript a zavřete Vim:

:wq

4. Změňte oprávnění skriptu na spustitelný soubor:

chmod +x double_parentheses.sh

5. Spusťte skript, abyste viděli výsledky:

./double_parentheses.sh

Syntaxe jedné závorky

Jediná závorka je jiný název pro test a standardní nástroj POSIX dostupný pro všechny shelly. Základní syntaxe je:

if [ <commands> ]
then
        <commands>
fi

První bash if příklad uvedený v tomto tutoriálu (test_script.sh ) funguje stejně dobře s alternativní syntaxí:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
fi
echo Bye!

Spusťte skript a potvrďte, že výstup je ekvivalentní. Úplnou dokumentaci a podrobnosti o použití syntaxe hranatých závorek získáte spuštěním příkazu man na test nástroj:

man test

Syntaxe se dvěma závorkami

Syntaxe dvou hranatých závorek v bash if skripty jsou nejlepší volbou, pokud přenositelnost není nutná. Dvojité závorky jsou lepší než jednoduché závorky a zahrnují mnoho pokročilých možností. Syntaxe je:

if [[ <commands> ]]
then
        <commands>
fi

Vyzkoušejte níže uvedený příklad, abyste viděli, jak funguje shoda zástupných řetězců v if příkaz:

1. Vytvořte soubor skriptu prostředí s názvem double_brackets :

vi double_brackets.sh

2. Přidejte následující kód:

if [[ $USER == k* ]]
then
        echo Hello $USER
fi
echo Bye!

3. Skript zkontroluje, zda je počáteční písmeno uživatelského jména k a pošle pozdrav, pokud ano. Uložte a zavřete skript:

:wq

4. Nastavte soubor jako spustitelný pomocí chmod:

chmod +x double_brackets.sh

5. Spusťte program pomocí:

./double_brackets.sh

Další typy podmíněných příkazů Bash

if příkaz provádí pouze jednu podmíněnou kontrolu. Upravte if s jinými typy bashových podmínek k vytvoření komplexních hodnocení.

if else

The if else poskytuje jednu metodu pro definování různých akcí na základě výstupu kontrolované podmínky. Základní syntaxe je:

if <command>
then
	<commands>
else
	<commands>
fi

Následující příklad ukazuje, jak if else podmíněné práce:

1. Vytvořte nový skript pomocí Vim:

vi if_else.sh

2. Do skriptu vložte následující kód:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
else
        echo "It's less than 100"
fi
echo Bye!

Příkaz kontroluje výstup příkazu v řádku 4 a na základě výsledku vytiskne popisnou zprávu:

  • Pokud je zadané číslo větší než 100 , program zadá řádek 6 a vytiskne zprávu.
  • Pokud je číslo menší než 100 , zprávu v else klauzule (řádek 8 ) vytiskne na konzoli.

3. Uložte skript a zavřete Vim:

:wq

4. Nastavte skript jako spustitelný:

chmod +x if_else.sh

5. Nakonec spusťte skript několikrát a otestujte různé hodnoty:

./if_else.sh

příkaz if elif

elif klauzule kombinovaná s if else příkaz vytváří více podmíněných kontrol. if elif vytvoří řadu kontrol s různými výsledky. Syntaxe je:

if <command>
then
        <commands>
elif <command>
then
        <commands>
else
        <commands>
fi

Chcete-li vytvořit skript pomocí elif :

1. Vytvořte soubor shellu s názvem elif :

vi elif.sh

2. V elif.sh soubor, přidejte následující příklad kódu:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
elif [ $VAR -lt 100 ]
then
        echo "It's less than 100"
else
        echo "It's exactly 100"
fi
echo Bye!

V příkladu je přidán elif zkontrolujte řádek 7 abyste zjistili, zda je zadané číslo menší než 100. Pokud příkazy na řádcích 4 a 7 selžou, program skočí na klauzuli else.

3. Uložte a zavřete soubor:

:wq

4. Vytvořte soubor elif.sh spustitelný soubor:

chmod +x elif.sh

5. Spusťte skript několikrát a zkontrolujte chování pro různá čísla:

./elif.sh

Přidejte více elif doložky k větvení výpisu pro další podrobné kontroly. Pro případy, kdy if a elif série vzorů roste, lepší možností je použít case prohlášení.

Vnořený příkaz if

Vnořeno if příkazy přidávají větev do if . Konkrétně, když příkaz projde první kontrolou if, projde novou kontrolou, aby se výsledek dále filtroval. Syntaxe je:

if <commands>
then
        if <commands>
        then
                <commands>
        fi
fi

Vnořené if se běžně používá k prohledávání vícerozměrných polí. Snažte se však vyhnout tomu, abyste měli více než dva nebo tři vnořené if příkazy ke snížení složitosti programu. Přehodnoťte logiku kódu při vnořeném if neustále roste do hloubky.


Linux
  1. Bash If-Else prohlášení s 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

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

  2. Bash Shell Exit Status Tutorial s praktickými příklady

  3. Vyvolat chybu ve skriptu Bash

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

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

  3. Existuje příkaz goto v bash?