
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ů:
-n
VAR
- True, pokud je délkaVAR
je větší než nula.-z
VAR
- True, pokudVAR
je prázdný.STRING1 = STRING2
- Pravda, pokudSTRING1
aSTRING2
jsou si rovni.STRING1 != STRING2
- Pravda, pokudSTRING1
aSTRING2
nejsou si rovni.INTEGER1 -eq INTEGER2
- True, pokudINTEGER1
aINTEGER2
jsou si rovni.INTEGER1 -gt INTEGER2
- True, pokudINTEGER1
je větší nežINTEGER2
.INTEGER1 -lt INTEGER2
- True, pokudINTEGER1
je menší nežINTEGER2
.INTEGER1 -ge INTEGER2
- True, pokudINTEGER1
je rovno nebo větší než INTEGER2.INTEGER1 -le INTEGER2
- True, pokudINTEGER1
je rovno nebo menší nežINTEGER2
.-h
FILE
- True, pokudFILE
existuje a je symbolickým odkazem.-r
FILE
- True, pokudFILE
existuje a je čitelný.-w
FILE
- True, pokudFILE
existuje a lze do něj zapisovat.-x
FILE
- True, pokudFILE
existuje a je spustitelný.-d
FILE
- True, pokudFILE
existuje a je adresářem.-e
FILE
- True, pokudFILE
existuje a je souborem, bez ohledu na typ (uzel, adresář, soket atd.).-f
FILE
- True, pokudFILE
existsand 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ář.