V této příručce se na příkladech naučíme použití podmíněných příkazů ve skriptování Bash. Rozhodování je důležitým krokem v programování. Může nastat situace, kdy musí být splněny určité podmínky a na základě toho musíte napsat nějakou logiku. Toto dělá podmíněný příkaz. Podmíněné příkazy vám umožňují psát logiku a přijímat rozhodnutí. Koncept, který zde čtete, bude stejný pro všechny programovací jazyky, ale s rozdílem v syntaktice a implementaci.
Syntaxe podmíněného příkazu
Stavební blok podmíněného příkazu v bash je následující.
if [[ conditions ]] then code elif [[ conditions ]] then code else code fi
Vysvětlení kódu:
- Klíčová slova
"if"
a"fi"
označte začátek a konec podmíněného příkazu. Za každým příkazem if by mělo následovat"then"
klíčové slovo. - Buď
[[ ]]
nebo[ ]
by měl být použit k vyhodnocení stavu. Pokud je podmínka vyhodnocena jako „True“ , pak bude proveden blok kódu. - Podmíněný příkaz může mít jednu podmínku if a více
elif
podmínky. Pokud je podmínka vyhodnocena jako pravdivá, všechny následující podmíněné příkazy jsou přeskočeny. - Pokud jsou všechny
if
neboelif
blok je vyhodnocen jako nepravda pak blok kódu z"else"
doložka poběží. - Přestože neexistují žádná přísná pravidla pro odsazení, ponechte v bloku kódu 2 mezery, což zajistí lepší čitelnost.
Pro vyhodnocení podmínek má bash vestavěný příkaz s názvem "test"
. Hranaté závorky jsou stejné jako příkaz test, takže můžete použít buď příkaz test, nebo hranaté závorky.
$ type -a test test is a shell builtin test is /usr/bin/test test is /bin/test
test
podporuje spoustu operátorů příkaz k vyhodnocení podmínek a jak tyto operátory používat, uvidíme v nadcházející části. Chcete-li získat seznam operátorů, můžete spustit některý z níže uvedených příkazů.
$ man test
$ help test
Operátory testu souborů
Operátory testu souborů lze použít pro práci s objekty souboru nebo adresáře. Pomocí operátorů testu souborů můžete ověřit, zda je daný soubor nebo adresář přítomen nebo ne, daný objekt je soubor nebo adresář, jaký typ souboru máte co do činění, velikost souboru atd. Spusťte následující příkaz a hledejte sekce souborového operátora.
$ man test
Ne všechny operátory se často používají, ale provedu vás těmi nejdůležitějšími.
Chcete-li zkontrolovat, zda je daný soubor přítomen nebo ne, použijte -e
vlajka. Zde zjišťuji, zda .bashrc
je soubor v mém domovském adresáři nebo ne.
if [[ -e /home/${USER}/.bashrc ]] then echo "File is present" else echo "File is not present" fi
Chcete-li zkontrolovat, zda je daný adresář přítomen nebo ne, použijte -d
vlajka. Zde hledám desktop adresář v mé domovské složce.
if [[ -d ~/Desktop/ ]] then echo "Directory is present" else echo "Directory is not present" fi
Chcete-li zkontrolovat, zda soubor není nulová velikost použijte -s
vlajka. Zde jsem vytvořil soubor s názvem "zero_byte.txt"
a připojil nějaký text.
$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]] then echo "File is not zero byte" else echo "File is zero byte" fi
Můžete použít !
symbol s libovolnými příznaky, které převrátí výsledek. Používám stejný příklad jako výše, ale s "!"
symbol. Bude inverzní a vytiskne soubor jako soubor s nulovým bajtem, i když tomu tak není.
$ if [[ ! -s ~/Desktop/zero_byte.txt ]] then echo "File is not zero byte" else echo "File is zero byte" fi
Operátory porovnání celých čísel
Níže jsou uvedeny operátory porovnání celých čísel, které budou vyhodnoceny proti dvěma daným celým číslům.
-eq => Integer X is equal to Integer Y -ne => Integer X is not equal to Integer Y -gt => Integer X is greater than Integer Y -ge => Integer X is greater than or equal to Integer Y -lt => Integer X is lesser than Integer Y -le => Integer X is lesser than or equal to Integer Y
Každý příkaz bash vrací kód ukončení mezi 0–255 a k vyhodnocení výstupních kódů použijeme operátory porovnání Integer. V níže uvedeném příkladu přiřazuji výstupní kód nvim příkaz do proměnné s názvem EXCODE a provedení celočíselného srovnání. Protože neovim není k dispozici, vyhodí výstupní kód 127 (chyba příkazu nenalezena).
$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]] then echo "nvim is available to use" elif [[ $EXCODE -eq 127 ]] then echo "Command not found, check if nvim is installed or not" else echo "Return code is other than 0 & 127. Check and fix the error" fi
Ve výše uvedeném příkladu jsem použil elif
prohlášení pro první prohlášení v tomto článku. Nejprve "if"
podmínka se vyhodnotí, aby se zkontrolovalo, zda je návratový kód nula, což vrátí hodnotu false, a poté se řízení předá elif
a podmínka je vyhodnocena jako true a spustí blok kódu. Můžete přidat tolik elif
prohlášení k vyhodnocení různých podmínek.
Můžete také vyhodnotit více podmínek v jednom if
nebo elif
pomocí logického operátoru AND, OR.
LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.
Níže je uveden příklad logického AND operátor, kde je celé číslo uložené v proměnných X a Y jsou vyhodnoceny jako pravdivé .
$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]] then echo "ok to proceed" else echo "Not ok to proceed" fi
Níže je uveden příklad logického OR operátor kde proměnná X je vyhodnoceno jako pravda a proměnná Y je vyhodnocena jako nepravda .
$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]] then echo "ok to proceed" else echo "Not ok to proceed" fi
Kompaktní podmíněné příkazy
Pokud musíte napsat if
a else
pak můžete použít zkrácený způsob. Ve zkrácené podobě není potřeba používat if..then..else..fi
klíčová slova. Můžete použít logické AND (&&
) a logické OR (||
) operátory.
[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>
Podívejte se na níže uvedený příklad. Snažím se zkontrolovat, zda balíček neofetch je k dispozici a pokud není k dispozici, pokuste se jej nainstalovat.
$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y
Vysvětlení kódu:
- Spustí
"which neofetch"
a pokud je návratový kód nula, pak cokoli, co následuje za&&
operátor poběží. - Pokud je návratový kód vyšší než nula (vyhodnoceno jako nepravda), cokoliv následuje za
||
operátor poběží. - Je to podobné jako
if
aelse
prohlášení."If"
příkaz se spustí, pouze pokud je podmínka vyhodnocena jako pravdivá. V tomto případě je to A operátor. Podobně se klauzule else spustí pouze tehdy, když"if"
stav je vyhodnocen jako nepravdivý. V tomto případě je to NEBO operátor. - V mém počítači je neofetch již nainstalován, takže výstupní kód bude nula. Spustí
echo
příkaz. Pokud neofetch není nainstalován, spustíapt install
příkaz.
Níže je další příklad, kdy používám operátor testu souborů ke kontrole, zda má soubor nula bajtů nebo ne.
$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"
Operátory porovnání řetězců
Jako Integer a Soubor testovací operátory, máme sadu operátorů pro práci s řetězci. Níže je uvedena důležitá sada řetězcových operátorů.
-z => Check if string is NULL. -n => Check if string is not NULL. == => Check for string equality. != => Check for string inequality.
Chcete-li zkontrolovat, zda je řetězec NULL nebo ne NULL, použijte -z
a -n
vlajka. K vyhodnocení podmínky používám kompaktní syntaxi podmíněného příkazu.
$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"
Chcete-li zkontrolovat, zda jsou dva řetězce stejné, použijte ==
operátor. Řetězce rozlišují velká a malá písmena, takže musíte provést srovnání s ohledem na tento bod.
$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"
Chcete-li zkontrolovat, zda dva řetězce nejsou stejné, použijte !=
operátor.
$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"
Závěr
V tomto článku jsme viděli, jak pracovat s podmíněnými příkazy v bash. Také jsme viděli, jak používat operátory test souboru, celé číslo a řetězec. Nakonec jsme diskutovali o tom, jak psát kompaktní podmíněné příkazy pomocí logických operátorů AND a logických OR s příklady.
Pro jakoukoli zpětnou vazbu nebo návrh použijte sekci komentářů a my se rádi vrátíme zpět.
Příručky skriptování Bash:
- Bash Scripting – manipulace s řetězci
- Skriptování Bash – příkaz Printf s příklady
- Skriptování Bash – indexované pole s příklady
- Bash Scripting – Asociativní pole vysvětleno s příklady
- Bash Scripting – pro smyčku vysvětlenou s příklady
- Bash Scripting – smyčka Zatímco a dokud není vysvětlena příklady
- Přesměrování Bash vysvětleno na příkladech
- Bash Scripting – proměnné vysvětlené na příkladech
- Bash Scripting – funkce vysvětlené na příkladech
- Příkaz Bash Echo vysvětlený s příklady v Linuxu
- Výukový program Bash Heredoc pro začátečníky