Organizacja Kodu

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).
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License