Funkce jsou základním stavebním kamenem pro modulární a udržovatelný kód v shell skriptech. Umožňují rozdělit velké skripty na menší, přehlednější části, které mohou být znovu použity v různých částech skriptu nebo dokonce v jiných skriptech. V tomto článku se podíváme na to, jak definovat funkce, jak je používat, jaké mají výhody, a ukážeme praktické příklady jejich využití v různých scénářích.
Funkce v shellu je definována pomocí názvu funkce následovaného závorkami a tělem funkce uzavřeným ve složených závorkách. Tělo funkce může obsahovat libovolný počet příkazů, které se provedou při volání funkce.
Základní syntaxe pro definování funkce v Bash je následující:
function_name() {
# příkazy
}
Příklad jednoduché funkce, která vypíše pozdrav:
greet() {
echo "Ahoj, světe!"
}
Pro zavolání funkce stačí napsat její název:
greet
Tento skript vypíše "Ahoj, světe!" při každém volání funkce greet
.
Stejně jako skript může přijímat argumenty při spuštění, funkce může přijmout argumenty, které jí jsou předány při volání. Tyto argumenty se zpracovávají pomocí speciálních proměnných, jako je $1
, $2
a tak dále.
Příklad funkce, která přijme jméno a vypíše ho:
greet_user() {
echo "Ahoj, $1!"
}
Volání této funkce:
greet_user "Petr"
Výstup bude: Ahoj, Petr!
Funkce mohou přijímat i více argumentů a můžete je zpracovat podle potřeby. Pokud chcete získat všechny argumenty ve funkci, použijte $@
, který reprezentuje všechny argumenty předané funkci jako seznam:
print_args() {
echo "Argumenty jsou: $@"
}
Volání:
print_args "argument1" "argument2" "argument3"
Výstup bude: Argumenty jsou: argument1 argument2 argument3
Pokud máte spoustu funkcí, které používáte v různých skriptech, je rozumné tyto funkce seskupit do samostatného souboru, který můžete importovat do různých skriptů. Tímto způsobem udržujete skripty čisté a funkce mohou být znovu použity bez potřeby duplikování kódu.
Předpokládejme, že máte soubor functions.sh
, který obsahuje funkce:
add_numbers() {
echo $(($1 + $2))
}
subtract_numbers() {
echo $(($1 - $2))
}
Pokud chcete tyto funkce použít v jiném skriptu, stačí importovat tento soubor pomocí příkazu source
nebo bodového zápisu:
source functions.sh
nebo:
. functions.sh
Po importu můžete volat funkce, jakoby byly definovány přímo ve hlavním skriptu:
add_numbers 5 3
Výstup bude: 8
.
Funkce v Bash mohou vracet hodnoty, které mohou být použity ve skriptech. Existují dva hlavní způsoby, jak funkce vrátí hodnotu: pomocí příkazu echo
a pomocí return
.
Pokud chcete, aby funkce vrátila hodnotu, která bude přímo zobrazena nebo použita v dalším příkazu, použijete echo
:
multiply() {
echo $(($1 * $2))
}
Volání funkce:
result=$(multiply 3 4)
Výstup bude: result = 12
.
Pokud chcete, aby funkce vrátila hodnotu jako návratový kód (exit code), použijete return
:
check_positive() {
if [ $1 -gt 0 ]; then
return 0
else
return 1
fi
}
Volání této funkce:
check_positive -5
echo $?
Výstup bude: 1
, protože funkce vrátí hodnotu 1, což znamená, že argument není kladný.
Praktické využití funkcí je neocenitelné, zejména v případě skriptů, které vykonávají opakující se úkoly, jako je zálohování dat, instalace balíčků nebo generování reportů. Umožňuje vám rozdělit komplexní úkoly na moduly, které mohou být nezávisle testovány a opakovaně použity.
Vytvořte funkci, která bude zálohovat soubory do určeného adresáře:
backup_files() {
tar -czf $1.tar.gz $2
echo "Záloha $2 byla uložena jako $1.tar.gz"
}
Volání funkce pro zálohování adresáře /home/user/data
do souboru backup
:
backup_files "backup" "/home/user/data"
Výstup bude: Záloha /home/user/data byla uložena jako backup.tar.gz
.
Pokud se chcete dozvědět více o používání funkcí v shell skriptech, navštivte náš Kurz SHELL – Programování v UNIX shellu pro systémové administrátory.
Viac informacií preberáme na kurze: