Skrypty Bash – Funkcje
Skrypt Bash jest zwykłym plikiem tekstowym. Ten plik zawiera różne polecenia do wykonania krok po kroku. Polecenia te można zapisać bezpośrednio w wierszu poleceń, ale z punktu widzenia możliwości ponownego użycia przydatne jest przechowywanie wszystkich powiązanych ze sobą poleceń dotyczących konkretnego zadania w jednym pliku. Możemy użyć tego pliku do wykonania zestawu poleceń jeden lub więcej razy, zgodnie z naszymi wymaganiami.
W tym artykule omówimy użycie funkcji w ramach skryptów Bash.
W programowaniu funkcja to blok kodu, który wykonuje pewne zadania i można ją wywoływać wielokrotnie w celu wykonania zadań. Zapewnia modułowość programu i zmniejsza długość kodu. Najprostszy przykład użycia funkcji w skryptach Bash można podać jako –
Przykładowy skrypt:
#!/bin/bash #It is a function myFunction () { echo Hello World from techcodeview.com } #function call myFunction Wyjście:
Hello World from techcodeview.com
Powyższy przykład pokazuje funkcję, która po wywołaniu wyświetla coś. Zatem podstawowa składnia pisania funkcji w skrypcie Bash będzie następująca
Składnia:
# for defining function_name(){ commands ..... } function_name # for calling Oprócz tego możemy mieć także funkcje z przekazywanymi argumentami i zwracającymi wartościami. Teraz je omówmy.
Funkcje z przekazującymi argumentami
Możemy dodać argumenty lub parametry do funkcji i przekazać za ich pomocą dane do funkcji, aby funkcja mogła działać z tymi danymi. W skryptach bash możemy użyć następującej składni do napisania funkcji z przekazującymi argumentami.
Składnia funkcji z przekazującymi argumentami:
#for defining function_name(){ ..... parameter_1 = $1 parameter_2 = $2 . . . parameter_n = $n .... commands ..... } #for calling function_name p1 p2 ....pn Możemy bezpośrednio przekazywać argumenty podczas wywoływania funkcji i uzyskać do nich dostęp za pomocą 1 $, 2 $….. $n w ramach funkcji. Zobaczmy przykład, aby lepiej to zrozumieć.
Przykład funkcji z przekazującymi argumentami:
#!/bin/bash add_two_num(){ local sum=$(($1+$2)) echo sum of $1 and $2 is $sum } add_two_num 2 3 Dane wyjściowe funkcji z przekazywanymi argumentami:
sum of 2 and 3 is 5
Powyżej znajduje się skrypt dodawania dwóch liczb. Tutaj podaliśmy 2 i 3 jako argumenty. Uzyskaliśmy do nich dostęp za pomocą funkcji $1 i $2, obliczyliśmy ich sumę i wydrukowaliśmy ją na terminalu. Poniżej przedstawiono powłokę terminala po wykonaniu skryptu –
Funkcje zwracające wartości
Wartość zwracana jest generowana i zwracana do metody wywołującej przez funkcję po zakończeniu jej wykonywania. Wartość zwracana może służyć do udostępniania wygenerowanego wyniku lub kodu stanu informującego o tym, czy dana funkcja została pomyślnie wykonana, czy nie. W skryptach Bash wartość zwracana jest przypisana do $? zmienny.
Przykład tego samego podano poniżej –
Przykład funkcji zwracających wartości:
#!/bin/bash myfun(){ return 7 } myfun echo The return value is $? Dane wyjściowe funkcji z wartościami zwracanymi:
The return value is 7
Poniżej znajduje się wynik powłoki terminala po wykonaniu skryptu –
Teraz zmodyfikujmy wcześniejszą sumę skryptu dwuliczbowego.
Zmodyfikowany kod:
#!/bin/bash myfun(){ return $(($1+$2)) } add_two_num 2 3 echo The sum is $? Dane wyjściowe zmodyfikowanego kodu:
The sum is 5
Powyższy kod jest teraz przykładem użycia obu parametrów i wartości zwracanej w funkcji skryptu Bash.
Poniżej przedstawiono powłokę terminala po wykonaniu skryptu –
Zmienny zakres
Zakres w programie lub skrypcie to obszar, w którym występują zmienne. Jeśli zmienna jest zadeklarowana wewnątrz funkcji, to zazwyczaj jest to zmienna lokalna, a jeśli jest zadeklarowana na zewnątrz, jest to zmienna globalna. W przypadku skryptu bash koncepcja ta jest nieco inna, tutaj każda zmienna, niezależnie od tego, czy jest zapisana wewnątrz funkcji, czy domyślnie poza nią, jest zmienną globalną. Jeśli chcemy utworzyć zmienną lokalną, musimy użyć słowa kluczowego local.
Najlepszą praktyką jest zawsze używanie zmiennej lokalnej wewnątrz funkcji, aby uniknąć niepotrzebnego zamieszania.
Przykład tego samego podano poniżej –
Przykład zakresu zmiennej:
#!/bin/bash var1='Apple' #global variable myfun(){ local var2='Banana' #local variable var3='Cherry' #global variable echo 'The name of first fruit is $var1' echo 'The name of second fruit is $var2' } myfun #calling function echo 'The name of first fruit is $var1' #trying to access local variable echo 'The name of second fruit is $var2' echo 'The name of third fruit is $var3' Dane wyjściowe zakresu zmiennej:
The name of first fruit is Apple The name of second fruit is Banana The name of first fruit is Apple The name of second fruit is The name of third fruit is Cherry
W powyższym przykładzie zmienna var2 jest zmienną lokalną, więc gdy uzyskujemy do niej dostęp z funkcji, wszystko działa dobrze, ale gdy próbujemy uzyskać do niej dostęp poza funkcją, na wyjściu pojawia się pusty wynik.
Z drugiej strony, w przeciwieństwie do języków programowania, mimo że zmienna var3 jest zdefiniowana wewnątrz funkcji, nadal zachowuje się jak zmienna globalna i można uzyskać do niej dostęp poza funkcją. Poniżej przedstawiono powłokę terminala po wykonaniu skryptu –
Nadpisywanie poleceń
Możliwe jest posiadanie funkcji o tej samej nazwie co polecenie. Jest to pomocne, jeśli chcemy uruchomić polecenie z określonymi opcjami lub chcemy mieć jego niestandardową edycję.
Przykład tego samego podano poniżej –
Przykład poleceń nadrzędnych:
#!/bin/bash #overriding command echo(){ builtin echo 'The name is : $1' } echo 'Satyajit Ghosh' Dane wyjściowe poleceń nadrzędnych:
The name is : Satyajit Ghosh
W tym przykładzie zastąpiliśmy Echo Komenda. Teraz przed wydrukowaniem danego ciągu dołącza do niego więcej słów, a następnie drukuje. Poniżej przedstawiono powłokę terminala po wykonaniu skryptu –