Základy funkcí v shellu: Vyšší čitelnost a znovupoužitelnost kódu

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.

1. Definice funkce a základní syntaxe (function_name() { … })

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.

2. Předávání argumentů do funkce ($1, $2, …)

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

3. Vytváření knihoven funkcí a jejich import do různých skriptů

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.

4. Návratové hodnoty a zpracování chyb (exit codes, echo vs. return)

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.

Výstup pomocí echo

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.

Výstup pomocí return

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ý.

5. Praktické příklady: modulární přístup k zálohám, aktualizacím a reportům

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.

Příklad skriptu na zálohování

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.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz SHELL - Programování v UNIX shellu pro systémové administrátory

Marián Knězek