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: