W każdym języku dłuższe programy można organizować korzystajac z funkcji i plików z funkcjami nie inaczej jest w Bashu, co prawda nie jest językiem wspierajacym pisanie obiektowe - ale kto tego potrzebuje pisząc w gruncie rzeczy proste skrypty powłoki?
Funkcje
To coś w rodzaju podprogramów. Stosuje się je gdy w naszym skrypcie powtarza się jakaś grupa poleceń (po co pisać je kilka razy), skoro można to wszystko umieścić w funkcji. Do danej funkcji odwołujemy się podając jej nazwę, a wykonane zostanie wszystko co wpisaliśmy między nawiasy { }, skraca to znacznie długość skryptu, a więc ilość miejsc w których moglismy się pomylić, orócz tego ułatwia zrozumienie kodu.
Składnia
Właściwie są dwa sposoby deklarowania funkcji
Pierwszy:
function nazwa_funkcji
{
polecenie1
polecenie2
polecenie3
}
Drugi:
nazwa_funkcji()
{
polecenie_1
polecenie_2
polecenie_3
}
Przykład
#!/bin/bash
function napis
{
echo "To jest napis"
}
# main
napis
W przykładzie nazwę funkcji umieszczamy po słowie kluczowym function, w powyższym przykładzie mamy funkcje o nazwie napis, odwołujemy się do niej podając jej nazwę, wykonane zostaną wtedy wszystkie polecenia, jakie jej przypiszemy.
Uwaga:
Znacznie częściej stosowany do deklaracji funkcji stosowany jest sposób drugi, wynika to z tego, że jest on bardzo podobny do tego znanego z języka C.
Przekazywanie parametrów do funkcji
Przekazanie parametrów do funkcji następuje dokładnie tak samo jak do każdego polecenia które jest w naszym skrypcie
Składnia
nazwa_funkcji parametr_1 parametr_2
Przykład
#!/bin/bash
funkcja_z_parametrami()
{
echo "Przekazano $# parametrów"
echo "Parametr $1"
echo "Parametr $2"
}
funkcja_z_parametrami "param1" "param2"
Uwaga:
Zmienna specjalna $0 przechowujaca nazwę skryptu nie jest dostępna!!! Choć na pierwszy rzut oka powinna przechowywać nazwę funkcji.
Pliki dołączane
Funkcje moga się znajdować w innym pliku, co uczyni nasz skrypt bardziej przejrzystym i wygodnym. Nie jest to trudne wystarczy utworzyć skrypt (dokładnie taki jak zawsze) i dołączyć go do naszego głownego "programu".
Składnia
. ~/naszplik_z_funkcjami
lub
source ~/naszplik_z_funkcjami
gdzie plik z funkcjami bedzie podobny do tego poniżej:
nazwa_funkcji()
{
polecenie_1
}
nazwa_funkcji2()
{
polecenie_1
}
Trzeba pamiętać o podaniu kropki i spacja przed nazwą pliku który ma zostać dołączony …
Uwaga: Można skorzystać z polecenia source
Przykład
#!/bin/bash
function nasza_funkcja
{
echo -e 'Właśnie użyłeś funkcji o nazwie "nasza_funkcja".\a'
}
Teraz pozostało jeszcze utworzyć skrypt w którym wywołamy funkcje: nasza_funkcja:
#!/bin/bash
echo "Test funkcji."
. plik_z_funkcja
nasza_funkcja
Łączenie instrukcji w bloki
Wszędzie tam, gdzie musimy użyć pojedynczej instrukcji, możemy zastosować blok instrukcji, czyli ciąg instrukcji ujęty w nawiasy klamrowe lub zwykłe.
Składnia:
{
ciąg poleceń
...
}
W przypadku nawiasów klamrowych polecenia są wykonywane w bieżącej powłoce i środowisku. Wartością takiego bloku jest wartość ostatniej instrukcji.
Przykład:
#!/bin/bash
if true && { false;false;true } ; then
echo TRUE
fi
Powyższy skrypt wypisze TRUE, ponieważ ostatnia instrukcja zwraca wartość 0 (true).
Składnia:
(
ciąg poleceń
)
Dla poleceń w nawiasach zwykłych tworzona jest nowa powłoka. Wartością zwracaną jest kod ostatniej instrukcji bądź wartość zwrócona przez komendę 'exit' (notabene to jest zwr
ócenie wartości ustalonej wcześniej).
Przykład:
if true && (false;false;exit 0) ; then
echo TRUE
fi
Powyższy skrypt wypisze TRUE, ponieważ ostatnia instrukcja zwraca wartość 0 (true).





