Tento tutoriál vás provede základy Bash if Statement a ukázat vám, jak jej používat ve vašich skriptech shellu.
Rozhodování je jedním z nejzákladnějších pojmů počítačového programování. Stejně jako v jakémkoli jiném programovacím jazyce if , if..else , if..elif..else a vnořené if příkazy v Bash se používají ke spuštění kódu na základě určité podmínky.
if Prohlášení #
Bash if kondicionály mohou mít různé podoby. Nejzákladnější if výpis má následující tvar:
if TEST-COMMAND
then
STATEMENTS
fi
if příkaz začíná if klíčové slovo následované podmíněným výrazem a then klíčové slovo. Příkaz končí fi klíčové slovo.
Pokud TEST-COMMAND vyhodnotí jako True , STATEMENTS je popraven. Pokud TEST-COMMAND vrátí False , nic se neděje; STATEMENTS ignorovat.
Obecně je dobrou praxí vždy odsadit kód a oddělit bloky kódu prázdnými řádky. Většina lidí se rozhodne použít odsazení se 4 nebo 2 mezerami. Díky odsazení a prázdným řádkům bude váš kód čitelnější a organizovanější.
Podívejme se na následující příklad skriptu, který kontroluje, zda je dané číslo větší než 10:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
fi
Uložte kód do souboru a spusťte jej z příkazového řádku:
bash test.sh
Skript vás vyzve k zadání čísla. Pokud například zadáte 15, test příkaz se vyhodnotí jako true protože 15 je větší než 10 a echo příkaz uvnitř then klauzule bude provedena.
The variable is greater than 10.
if..else Prohlášení #
Bash if..else výpis má následující tvar:
if TEST-COMMAND
then
STATEMENTS1
else
STATEMENTS2
fi
Pokud TEST-COMMAND vyhodnotí jako True , STATEMENTS1 bude popraven. Jinak, pokud TEST-COMMAND vrátí False , STATEMENTS2 bude popraven. Můžete mít pouze jeden else klauzule v prohlášení.
Pojďme přidat else klauzule k předchozímu příkladu skriptu:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
else
echo "The variable is equal or less than 10."
fi
Pokud spustíte kód a zadáte číslo, skript vytiskne jinou zprávu podle toho, zda je číslo větší nebo menší / rovno 10.
if..elif..else Prohlášení #
Bash if..elif..else výpis má následující tvar:
if TEST-COMMAND1
then
STATEMENTS1
elif TEST-COMMAND2
then
STATEMENTS2
else
STATEMENTS3
fi
Pokud TEST-COMMAND1 vyhodnotí jako True , STATEMENTS1 bude popraven. Pokud TEST-COMMAND2 vyhodnotí jako True , STATEMENTS2 bude popraven. Pokud se žádný z testovacích příkazů nevyhodnotí jako True , STATEMENTS2 se provede.
Můžete mít jeden nebo více elif doložky v prohlášení. else klauzule je nepovinná.
Podmínky se vyhodnocují postupně. Jakmile podmínka vrátí True , zbývající podmínky se neprovedou a řízení programu se přesune na konec if prohlášení.
Pojďme přidat elif klauzule k předchozímu skriptu:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi
Vnořené if Výroky #
Bash vám umožňuje vnořit if příkazy v rámci if prohlášení. Můžete umístit více if příkazy uvnitř jiného if prohlášení.
Následující skript vás vyzve k zadání tří čísel a vytištění největšího čísla ze tří čísel.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]]
then
if [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
else
echo "$VAR3 is the largest number."
fi
else
if [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
fi
Takto bude výstup vypadat:
Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number.
Obecně je efektivnější použít case příkaz namísto vnořeného if prohlášení. Více podmínek #
Logické OR a AND operátory umožňují použít více podmínek v if prohlášení.
Zde je další verze skriptu pro tisk největšího čísla ze tří čísel. V této verzi namísto vnořeného if používáme logické AND (&& ) operátor.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
Testovací operátoři #
V Bash, test příkaz má jednu z následujících forem syntaxe:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Aby byl skript přenosný, raději použijte starý test [ příkaz, který je dostupný ve všech shellech POSIX. Nová upgradovaná verze test příkaz [[ (dvojité závorky) je podporována na většině moderních systémů používajících Bash, Zsh a Ksh jako výchozí prostředí.
Chcete-li negovat testovací výraz, použijte logické NOT (! ) operátor. Při porovnávání řetězců vždy používejte jednoduché nebo dvojité uvozovky, abyste se vyhnuli problémům s rozdělováním slov a shlukováním.
Níže jsou uvedeny některé z nejčastěji používaných operátorů:
-nVAR- True, pokud je délkaVARje větší než nula.-zVAR- True, pokudVARje prázdný.STRING1 = STRING2- Pravda, pokudSTRING1aSTRING2jsou si rovni.STRING1 != STRING2- Pravda, pokudSTRING1aSTRING2nejsou si rovni.INTEGER1 -eq INTEGER2- True, pokudINTEGER1aINTEGER2jsou si rovni.INTEGER1 -gt INTEGER2- True, pokudINTEGER1je větší nežINTEGER2.INTEGER1 -lt INTEGER2- True, pokudINTEGER1je menší nežINTEGER2.INTEGER1 -ge INTEGER2- True, pokudINTEGER1je rovno nebo větší než INTEGER2.INTEGER1 -le INTEGER2- True, pokudINTEGER1je rovno nebo menší nežINTEGER2.-hFILE- True, pokudFILEexistuje a je symbolickým odkazem.-rFILE- True, pokudFILEexistuje a je čitelný.-wFILE- True, pokudFILEexistuje a lze do něj zapisovat.-xFILE- True, pokudFILEexistuje a je spustitelný.-dFILE- True, pokudFILEexistuje a je adresářem.-eFILE- True, pokudFILEexistuje a je souborem, bez ohledu na typ (uzel, adresář, soket atd.).-fFILE- True, pokudFILEexistsand je běžný soubor (nikoli adresář nebo zařízení).
Závěr č.
if , if..else a if..elif..else příkazy vám umožňují řídit tok provádění skriptu Bash vyhodnocením daných podmínek.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.