GNU/Linux >> Znalost Linux >  >> Linux

Bash Scripting – podmíněné příkazy

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:

  1. 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.
  2. 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.
  3. 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.
  4. Pokud jsou všechny if nebo elif blok je vyhodnocen jako nepravda pak blok kódu z "else" doložka poběží.
  5. 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 a else 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

Linux
  1. Bash skriptování (I)

  2. The Bash ‘?

  3. Nemůžete spouštět bash skripty ani jako root?

  1. Jak zkontrolovat, zda soubor nebo adresář existuje v Bash

  2. Bash:Zápis do souboru

  3. Jak číst soubor řádek po řádku v Bash

  1. Příkaz zdroje Bash

  2. Bash:Připojit k souboru

  3. Jak používat operátory testování souborů Bash v Linuxu