v tomto tutoriálu vás provedeme základy prohlášení Bash if
a ukážeme vám, jak jej používat ve skriptech shell.
rozhodování je jedním z nejzákladnějších konceptů počítačového programování. Stejně jako v každém jiném programovacím jazyce, if
if..else
if..elif..else
a vnořené if
příkazy v Bashi lze použít ke spuštění kódu na základě určité podmínky.,
pokud příkaz #
Bash if
podmínky mohou mít různé formy. Nejzákladnější if
prohlášení má následující podobu:
if TEST-COMMANDthen STATEMENTSfi
if
prohlášení začíná if
klíčové slovo následuje podmíněný výraz a then
klíčové slovo. Příkaz končí klíčovým slovemfi
.,
Pokud TEST-COMMAND
vyhodnocuje, aby True
STATEMENTS
dostane popraven. PokudTEST-COMMAND
vrátí False
, nic se nestane, STATEMENTS
se ignoruje.
Obecně platí, že je vhodné vždy odsadit kód a oddělit bloky kódu prázdnými řádky. Většina lidí se rozhodne použít buď 4-space nebo 2-space odsazení. Odsazení a prázdné řádky, aby váš kód čitelnější a organizovaný.,
podívejme se na následující příklad skriptu, který zkontroluje, zda dané číslo je větší než 10,
#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi
Uložit 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, můžete zadat 15, test
příkaz vyhodnotí, aby true
, protože 15 je větší než 10, a echo
příkaz uvnitř then
doložka bude popraven.
if..,else #
Bash if..else
prohlášení má následující podobu:
if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi
Pokud TEST-COMMAND
vyhodnocuje, aby True
, STATEMENTS1
bude popraven. Jinak, pokud TEST-COMMAND
výnosy False
STATEMENTS2
bude popraven. Ve výpisu můžete mít pouze jednu klauzuli else
.,
přidat else
klauzule na předchozí příklad skriptu:
Pokud spustit kód, a zadejte číslo, skript se bude tisknout různé zprávy založené na tom, zda číslo je větší nebo menší/rovno 10.
if..eLife..else #
Bash if..elif..else
prohlášení má následující podobu:
if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi
Pokud TEST-COMMAND1
vyhodnocuje, aby True
, STATEMENTS1
bude popraven., Pokud TEST-COMMAND2
vyhodnocuje, aby True
STATEMENTS2
bude popraven. Pokud žádný z testovacích příkazů nehodnotí True
, provede se STATEMENTS2
.
ve výpisu můžete mít jednu nebo více doložek elif
. Klauzule else
je volitelná.
podmínky se vyhodnocují postupně., Jakmile podmínka vrátí True
zbývající podmínky nejsou provedeny a řízení programu se přesune na konec if
prohlášení.
přidat elif
klauzule předchozí skript:
Vnořené příkazy if #
Bash umožňuje hnízdo if
prohlášení do if
prohlášení. Můžete umístit víceif
prohlášení uvnitř jinéhoif
prohlášení.,
následující skript vás vyzve k zadání tří čísel a vytiskne největší číslo mezi třemi čísly.
Zde je, jak bude výstup vypadat takto:
Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
case
prohlášení namísto vnořené if
prohlášení.Více Podmínkám #
logické OR
AND
operátoři umožňují použít více podmínek v if
prohlášení.,
zde je další verze skriptu pro tisk největšího počtu ze tří čísel. V této verzi, namísto vnořené if
prohlášení, že jsme pomocí logických AND
(&&
) operátor.
Test Operátory #
V Bash, test
příkaz má následující syntaxi formy:
test EXPRESSION]
Pro skript přenosný, raději používat starý test [
příkaz, který je k dispozici na všech POSIX skořápky., Nové modernizované verze test
příkaz [[
(dvojitých hranatých závorek) je podporován na většině moderních systémů pomocí Bash, Zsh, Ksh, jako výchozí shell.
Chcete-li vyvrátit 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ělením slov a globbingem.,
Níže jsou uvedeny některé z nejčastěji používaných operátorů:
-
-n
VAR
– Pravda, když je délkaVAR
je větší než nula. -
-z
VAR
– Pravda, pokudVAR
je prázdný. -
STRING1 = STRING2
– Pravda, pokudSTRING1
STRING2
jsou stejné. -
STRING1 != STRING2
– Pravda, pokudSTRING1
STRING2
nejsou stejné., -
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -
-d
FILE
– Pravda, pokudFILE
existuje a je to adresář. -
-e
FILE
– Pravda, pokudFILE
existuje a je to soubor, bez ohledu na typ (uzel, adresář, soket, atd.). -
-f
FILE
– Pravda, pokudFILE
existuje a je obyčejný soubor (ne adresář nebo zařízení).,
Závěr #
if
if..else
if..elif..else
prohlášení umožní ovládat tok Bash skript, je exekuce na základě vyhodnocení dané podmínky.