Funkcie sú základným stavebným kameňom pre modulárny a udržiavateľný kód v shell skriptoch. Umožňujú rozdeliť veľké skripty na menšie, prehľadnejšie časti, ktoré môžu byť znovu použité v rôznych častiach skriptu alebo dokonca v iných skriptoch. V tomto článku sa pozrieme na to, ako definovať funkcie, ako ich používať, aké majú výhody, a ukážeme praktické príklady ich využitia v rôznych scenároch.
Funkcia v shelli je definovaná pomocou názvu funkcie nasledovaného zátvorkami a telom funkcie uzavretým v zložených zátvorkách. Telo funkcie môže obsahovať ľubovoľný počet príkazov, ktoré sa vykonajú pri volaní funkcie.
Základná syntax pre definovanie funkcie v Bash je nasledovná:
function_name() {
# príkazy
}
Príklad jednoduchej funkcie, ktorá vypíše pozdrav:
greet() {
echo "Ahoj, svet!"
}
Aby ste funkciu spustili, stačí zadať jej meno v skripte:
greet
Tento skript vypíše "Ahoj, svet!" pri každom spustení funkcie greet.
Rovnako ako skript môže prijímať argumenty pri spustení, funkcia môže prijať argumenty, ktoré sú jej odovzdané pri volaní. Tieto argumenty sa spracovávajú pomocou špeciálnych premenných, ako je $1, $2 a tak ďalej.
Príklad funkcie, ktorá prijíma meno a vypíše ho:
greet_user() {
echo "Ahoj, $1!"
}
Volanie tejto funkcie:
greet_user "Peter"
Výstup bude: Ahoj, Peter!
Funkcie môžu prijímať aj viac argumentov a môžete ich spracovať podľa potreby. Ak chcete získať všetky argumenty vo funkcii, použite $@, ktorý reprezentuje všetky argumenty odovzdané funkcii ako zoznam:
print_args() {
echo "Argumenty sú: $@"
}
Volanie:
print_args "argument1" "argument2" "argument3"
Výstup bude: Argumenty sú: argument1 argument2 argument3
Ak máte množstvo funkcií, ktoré používate v rôznych skriptoch, je rozumné tieto funkcie zoskupiť do samostatného súboru, ktorý môžete importovať do rôznych skriptov. Týmto spôsobom udržiavate skripty čisté a funkcie môžu byť znovu použité bez potreby duplikácie kódu.
Predpokladajme, že máte súbor functions.sh, ktorý obsahuje funkcie:
add_numbers() {
echo $(($1 + $2))
}
subtract_numbers() {
echo $(($1 - $2))
}
Ak chcete tieto funkcie použiť v inom skripte, stačí importovať tento súbor pomocou príkazu source alebo bodkového zápisu:
source functions.sh
alebo:
. functions.sh
Po importe môžete volať funkcie, ako keby boli definované priamo v hlavnom skripte:
add_numbers 5 3
Tento príkaz vypíše 8.
Funkcie v Bash môžu vrátiť hodnoty, ktoré môžu byť použité v skriptoch. Existujú dva hlavné spôsoby, ako funkcia vráti hodnotu: pomocou príkazu echo a pomocou return.
Ak chcete, aby funkcia vrátila hodnotu, ktorá bude priamo zobrazená alebo použitá v ďalšom príkaze, použijete echo:
multiply() {
echo $(($1 * $2))
}
Volanie funkcie:
result=$(multiply 3 4)
Výstup bude: result = 12.
Ak chcete, aby funkcia vrátila hodnotu ako návratový kód (exit code), použijete return:
check_positive() {
if [ $1 -gt 0 ]; then
return 0
else
return 1
fi
}
Volanie tejto funkcie:
check_positive -5
echo $?
Výstup bude: 1, pretože funkcia vráti hodnotu 1, čo znamená, že argument nie je kladný.
Praktické využitie funkcií je neoceniteľné, najmä v prípade skriptov, ktoré vykonávajú opakujúce sa úlohy, ako sú zálohovanie dát, inštalácia balíkov alebo generovanie reportov. Umožňuje vám rozdeliť komplexné úlohy do modulov, ktoré môžu byť nezávisle testované a opakovane použité.
Vytvorte funkciu, ktorá bude zálohovať súbory do určeného adresára:
backup_files() {
tar -czf $1.tar.gz $2
echo "Záloha $2 bola uložená ako $1.tar.gz"
}
Volanie funkcie pre zálohovanie adresára /home/user/data do súboru backup:
backup_files "backup" "/home/user/data"
Výstup bude: Záloha /home/user/data bola uložená ako backup.tar.gz.
Ak sa chcete dozvedieť viac o používaní funkcií v shell skriptoch, navštívte náš Kurz shell – Programovanie v UNIX shelli pre systémových administrátorov.
Viac informacií preberáme na kurze: