Základy funkcií v shelli: Vyššia čitateľnosť a znovupoužiteľnosť kódu

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.

1. Definícia funkcie a základná syntax (function_name() { … })

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.

2. Preposielanie argumentov do funkcie ($1, $2, …)

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

3. Vytváranie knižníc funkcií a ich import do rôznych skriptov

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.

4. Návratové hodnoty a spracovanie chýb (exit codes, echo vs. return)

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.

Výstup pomocou echo

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.

Výstup pomocou return

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

5. Praktické príklady: modulárny prístup k zálohám, aktualizáciám a reportom

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

Príklad skriptu na zálohovanie

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.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite si náš ebook teraz výnimočne zdarma!!!

Viac informacií preberáme na kurze:

Kurz SHELL - Programovanie v UNIX shelli pre systémových administrátorov

Marián Knězek

 

Súvisiace články: