Tento článek se zabývá základy skriptování v prostředí Bash a popisuje nejpoužívanější logické konstrukce včetně jednoduchého if prohlášení, jestliže prohlášení a elif prohlášení. Kromě toho se budeme zabývat správným způsobem porovnávání řetězců a čísel. Vylepšete své prostředí Linuxu za 5 minut!
Kdykoli jste zkušený správce systému nebo začínající uživatel Linuxu, stojí za to znát základy skriptování v shellu. Tato dovednost vám dává schopnost automatizovat opakovatelné úlohy v rámci jednoho nebo více serverů. Tyto úlohy obvykle zahrnují instalaci softwaru a konfiguraci jakýchkoli systémových služeb.
Příkaz If
pokud slouží jako základní jádro pro všechny programovací jazyky. Toto prohlášení pomáhá implementovat logiku rozhodování ve vašem programu nebo skriptu. Proto je důležité pochopit, jak používat různé if prohlášení.
Zde je základní syntaxe:
if [ condition ]
then
COMMANDS
fi
Kde:
- stav – je logický operátor if prohlášení.
- PŘÍKAZY – příkazy, které se provádějí, když je podmínka pravda .
- pokud tedy fi – jsou klíčová slova syntaxe.
Zde je seznam nejčastěji používaných operátorů testovacích podmínek:
Operátor | Popis |
---|---|
! VÝRAZ | Výraz je nepravdivý. |
-n STRING | Délka STRING je větší než nula.Text |
-z STRING | Délka STRING je nula (STRING, který je prázdný) |
STRING1 =STRING2 | STRING1 se rovná STRING2 |
STRING1 !=STRING2 | STRING1 se nerovná STRING2 |
INTEGER1 -ekv INTEGER2 | INTEGER1 se číselně rovná INTEGER2 |
INTEGER1 -gt INTEGER2 | INTEGER1 je číselně větší než INTEGER2 |
INTEGER1 -lt INTEGER2 | INTEGER1 je číselně menší než INTEGER2 |
-e SOUBOR | SOUBOR existuje |
-d SOUBOR | FILE existuje a je to adresář |
-s SOUBOR | FILE existuje a jeho velikost je větší než nula (FILE není prázdný. |
-w SOUBOR | FILE existuje a oprávnění k zápisu je uděleno. |
-x SOUBOR | FILE existuje a oprávnění ke spuštění je uděleno. |
-r SOUBOR | FILE existuje a oprávnění ke čtení je uděleno. |
Nejzajímavější je, že během provádění skriptu Bash je vše v [ ] prochází testem utility, která vrátí buď true nebo false . Pokud tedy zapomenete syntaxi operátoru, použijte jeho manuálovou stránku:
man test
Pojďme se podívat na nejjednodušší pokud příklad příkazu:
#!/bin/bash
var=2
if [ $var -eq 2 ]
then
echo "var equals 2"
fi
Očekávaný výstup:
var equals 2
Ve výše uvedeném příkladu jsme nastavili proměnnou var hodnotu na 2 , pak jsme testovali, zda var hodnota se rovná (-eq ) 2 a zprávu vytiskli.
V reálném životě obvykle používáme if příkazy v kombinaci s cyklovacími konstrukcemi Bash (cykly for, smyčky while, dokud smyčky). Zde je příklad použití if prohlášení s pro -smyčka:
#!/bin/bash
for var in 1 2 3 4 5
do
if [ $var -eq 3 ]
then
echo "Value 3 found"
break
fi
echo var=$var
done
Očekávaný výstup:
var=1
var=2
Value 3 found
V tomto příkladu procházíme seznam čísel z 1 do 5 v pro -loop a tisk hodnoty proměnné, kterou jsme právě zpracovali. Když je nalezena hodnota 3, přerušíme provádění skriptu.
Kromě výše uvedených příkladů můžete použít výsledek matematického výpočtu v if prohlášení:
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
fi
done
Ve výše uvedeném příkladu kontrolujeme sudá čísla v rozsahu mezi 1 a 10 .
Očekávaný výstup:
2 is even number
4 is even number
6 is even number
8 is even number
10 is even number
Nyní můžete zkontrolovat výstup příkazu Bash nebo výsledek provedení. Zkusme zkontrolovat, zda uživatel existuje v /etc/passwd soubor.
#!/bin/bash
user='root'
check_result=$( grep -ic "^$user" /etc/passwd )
if [ $check_result -eq 1 ]
then
echo "$user user found"
fi
Ve výše uvedeném příkladu používáme grep příkaz pro vyhledávání v /etc/passwd soubor:
grep -ic "^$user" /etc/passwd
Kde:
- -i – vyhledávání bez rozlišení velkých a malých písmen.
- -c – vrátí počet nalezených řádků (0 – nic nenalezeno; 1 nebo více, když bylo něco nalezeno).
- „^$user“ – vyhledejte řetězec, který začíná (^ ) z hodnoty $user proměnná.
Vše ostatní v příkladu by mělo být jasné.
Očekávaný výstup:
root user found
Dále zkontrolujeme, že /etc/passwd soubor existuje:
#!/bin/bash
file='/etc/passwd'
if [ -s $file ]
then
echo "$file file found"
fi
Očekávaný výstup:
/etc/passwd file found
Prohlášení If-else
Po seznámení se základními if prohlášení, pojďme se podívat, jak používat Bash if-else prohlášení.
Zde je obecná syntaxe:
if [ condition ]
then
TRUE_COMMANDS
else
FALSE_COMMANDS
fi
Kde:
- stav – je logický operátor if prohlášení.
- TRUE_COMMANDS – příkazy, které se provádějí, pokud je podmínka pravdivá.
- FALSE_COMMANDS – příkazy, které se provedou, pokud je podmínka nepravdivá.
- if, then, else, fi – jsou klíčová slova syntaxe.
Abychom demonstrovali, jak to funguje, změňme jeden příklad, kde jsme detekovali sudá čísla. Nyní vytiskneme, které číslo je sudé a které liché:
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
else
echo "$var is odd number"
fi
done
Zde je očekávaný výstup:
1 is odd number
2 is even number
3 is odd number
4 is even number
5 is odd number
6 is even number
7 is odd number
8 is even number
9 is odd number
10 is even number
Prohlášení Elif
Co když teď potřebujeme během provádění skriptu zkontrolovat několik různých podmínek? To je také možné pomocí příkazu elif, což je zkratka „else if “.
Syntaxe vypadá takto:
if [ condition_1 ]
then
CONDITION_1_COMMANDS
elif [ condition_2 ]
then
CONDITION_2_COMMANDS
else
ALL_OTHER_COMMANDS
fi
Kde:
- condition_1 – je logická podmínka pro provedení CONDITION_1_COMMANDS .
- CONDITION_1_COMMANDS – příkazy, které se provádějí, pokud je splněna podmínka_1 je pravda .
- CONDITION_2_COMMANDS – příkazy, které se provedou, pokud je splněna podmínka_2 je pravda .
- ALL_OTHER_COMMANDS – příkazy, které se provádějí při condition_1 a condition_2 jsou nepravdivé .
- if, then, elif, else, fi – jsou klíčová slova syntaxe.
Podívejme se na následující příklad:
#/bin/bash
time=8
if [ $time -lt 10 ]
then
echo "Good morning"
elif [ $time -lt 20 ]
then
echo "Good day"
else
echo "Good evening"
fi
V tomto příkladu nastavíme čas proměnná na 8 AM a vytiskl zprávu na základě časové hodnoty.
Očekávaný výstup:
Good morning
Vnoření příkazů if
Nyní, když se seznámíme se základy, můžeme toto téma dokončit tím, že se naučíme vnořovat příkazy if.
Zde je příklad:
#/bin/bash
value=5
if [ $value -lt 10 ]
then
if [ $value -eq 5 ]
then
echo "Value equals 5"
else
echo "Value not equals 5"
fi
else
echo "value is greater than 10"
fi
Zde je očekávaný výstup:
Value equals 5
Booleovské operátory
Může být užitečné zkontrolovat několik podmínek v jednom pokud prohlášení. Můžete to udělat pomocí následujících booleovských operátorů:
- && – logické AND.
- || – logické NEBO.
Zde je rychlý příklad:
#!/bin/bash
username="andrei"
birthday="12/16"
today=$( date +"%m/%d")
if [ $USER = $username ] && [ $today = $birthday ]
then
echo "Happy birthday\!"
fi
V tomto jednoduchém příkladu kontrolujeme, zda jsou pravdivé dvě podmínky:
- Uživatelské jméno přihlášeného uživatele by se mělo rovnat andrei.
- Dnes by mělo být 16. prosince.
Pokud jsou splněny obě podmínky, vytiskneme „Všechno nejlepší!“
Prohlášení případu
V některých situacích možná budete potřebovat více než 3 příkazy elif ke kontrole skriptu. V tomto případě je použití příkazu elif komplikované. Bash vám poskytuje lepší způsob řešení takových situací pomocí případu prohlášení.
Zde je syntaxe:
case VARIABLE in
VALUE_1)
COMMANDS_FOR_VALUE_1
;;
VALUE_2)
COMMANDS_FOR_VALUE_2
;;
*)
DEFAULT_COMMANDS
;;
esac
Kde:
- VARIABILNÍ – proměnná, jejíž hodnota bude porovnána s VALUE_1 nebo VALUE_2 .
- COMMANDS_FOR_VALUE_1 – příkazy, které se mají provést, když VARIABILNÍ hodnota se rovná VALUE_1 .
- COMMANDS_FOR_VALUE_2 – příkazy, které se mají provést, když VARIABILNÍ hodnota se rovná VALUE_2 .
- DEFAULT_COMMANDS – příkazy, které se mají provést, když VARIABILNÍ hodnota nebyla rovna jedné z horních podmínek.
- případ , v , esac – klíčová slova syntaxe.
Zde je velmi běžný vzor pro zpracování vstupu do skriptu a spuštění, zastavení nebo restartování služby na základě uživatele vstup:
#!/bin/bash
case $1 in
start)
echo "Starting the service"
;;
stop)
echo "Stopping the service"
;;
restart)
echo "Restarting the service"
;;
*)
echo "Unknown action"
;;
esac
V tomto příkladu kontrolujeme hodnotu speciální 1 $ Bash proměnná. Obsahuje první argument poskytnutý skriptu. Pokud například uložíte výše uvedený příklad do souboru service.sh a spusťte jej takto:
bash service.sh start
1 $ bude obsahovat jako hodnotu slovo „start“.
Zbytek je řešen logikou příkazu case.
Shrnutí
V tomto článku jsme se zabývali základy skriptování v prostředí Bash a popsali nejrozšířenější logické konstrukce včetně jednoduchého if prohlášení, jestliže prohlášení a elif prohlášení.
Doufáme, že vám tento článek byl užitečný. Pokud ano, prosím, pomozte nám to rozšířit do světa!