Ú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ězecDefined
. - Řádky 2–4 vytisknout proměnné do konzole. V tuto chvíli
outer_variable
má v sobě uložený řetězec, zatímcoinner_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ěňteouter_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.