Wstęp

Dzień dobry, dziś przedstawię kilka informacji na temat funkcji. Serdecznie zapraszam.

Co to funkcja?

Funkcja jest to zbiór operacji, wykonująca daną czynność, wydzielony fragment kodu, który może być wykorzystany wielokrotnie.

Jak funkcję zadeklarować?

Funkcje możemy zadeklarować na kilka sposobów, z czego będę zalecał, by wykorzystywać pierwszy, ponieważ jest on uniwersalny.

Sposób 1

Nazwa z nawiasami

moja_funkcja() {
    treść
}

Sposób 2

Nazwa poprzedzona słowem kluczowym

function moja_funkcja {
    treść
}

Sposób 3

Nazwa poprzedzona słowem kluczowym z nawiasami (często nie działa, ale czasami się pojawia w dokumentacji ¯_(ツ)_/¯ )

function moja_funkcja(){
    treść
}

Jak zadeklarować argumenty

Nie robimy tego. W Bash’u nie deklarujemy argumentów funkcji.

Jak w takim razie przekazać i odczytać wartości?

Wartości przekazujemy, tak jakbyśmy uruchamiali inny skrypt, czyli po wywołaniu np:

moja_funkcja arg1 arg2 arg3

Natomiast argumenty odczytujemy, tak samo jakbyśmy odczytywali je, dla calego skryptu:

moja_funkcja() {
    argument1="${1}"
    argument1="${2}"
    argument1="${3}"
}

A zwracanie wartości to przez return?

E.. he.. he.. Nie. return w Bashu służy, do określania kodu wyjścia. Jeśli natomiast chcemy “zwrócić” jakąś wartość, to musimy to niestety zrobić funkcją echo (polecam dodać -n) lub printf

fun_ret(){
    printf "returned"
}
_MY_VAR=$(fun_ret)

printf _MY_VAR
# returned

A co jeśli chcę mieć funkcję main, która będzie obsługiwała działanie?

Jeśli chcesz mieć funkcję main i w niej obsługiwać wszystkie argumenty, przełączniki, opcje. To zapraszam do wykorzystania w tym celu zmiennych specjalnych $@ i $* zależnie od potrzeby (czesto stosuje się $@, ale to tylko mała dygresja).

Czy mogę wykorzystać funkcję w instrukcji warunkowej?

Tak, ale trzeba to wykonać trochę inaczej niz zwykły test.

Napiszmy sobie prostą funkcję testującą:

my_test(){ 
    if [ $1 -eq 1 ]; then 
        return 1;
    fi; 
    return 0; #dla nie biegłych, ta linia wykona się wyłącznie, jeśli warunek będzie fałszywy 
}

if my_test 1; then
    echo "false" # Pamiętamy, że wszystko, co nie jest 0, jest błędem
else
    echo "true"
fi

Epilog

Na dziś wystarczy, mam nadzieję, że dowiedziałeś/łaś się czegoś nowego, albo odświeżyłeś/łaś sobie wiedzę. Tak czy inaczej, serdecznie Ci dziękuję, za przeczytanie tego posta. Jeśli masz potrzebę o cos zapytać, kontakt znajdziesz w zakładce “Oo Mnie”. A teraz życzę miłego dzionka i smacznej kawusi :) Do widzenia.