 
                
 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:
