Android

Funkcje Bash

Bash - Lekcja 4. Własne zewnętrzne funkcje

Bash - Lekcja 4. Własne zewnętrzne funkcje

Spisu treści:

Anonim

Funkcja Bash jest zasadniczo zestawem poleceń, które można wywoływać wiele razy. Celem tej funkcji jest pomoc w zwiększeniu czytelności skryptów bash i uniknięcie ciągłego pisania tego samego kodu.

W porównaniu z większością języków programowania funkcje Bash są nieco ograniczone. W tym samouczku omówimy podstawy funkcji Bash i pokażemy, jak ich używać w skryptach powłoki.

Deklaracja funkcji Bash

Składnia do deklarowania funkcji bash jest bardzo prosta. Mogą być zadeklarowane w dwóch różnych formatach:

  1. Pierwszy format zaczyna się od nazwy funkcji, po której następują nawiasy. Jest to preferowany i częściej używany format.

    function_name () { commands }

    Wersja jednoliniowa:

    function_name () { commands; }

    Drugi format zaczyna się od słowa zarezerwowanego dla function po którym następuje nazwa funkcji.

    function function_name { commands }

    Wersja jednoliniowa:

    function function_name { commands; }

Kilka punktów do odnotowania:

  • Lista poleceń między nawiasami klamrowymi {} jest ciałem funkcji. Nawiasy klamrowe otaczające ciało funkcji muszą być oddzielone od ciała spacjami lub znakami nowej linii. Zdefiniowanie funkcji nie powoduje jej wykonania. Aby wywołać funkcję bash, wystarczy użyć nazwy funkcji. Polecenia między nawiasami klamrowymi są wykonywane za każdym razem, gdy funkcja jest wywoływana w skrypcie powłoki. Definicja funkcji musi być umieszczona przed wywołaniem funkcji. Podczas korzystania z funkcji „kompaktowania” w jednym wierszu średnik ; należy wykonać ostatnie polecenie w funkcji. Zawsze należy starać się, aby nazwy funkcji były opisowe.

Aby to lepiej zrozumieć, spójrz na następujący przykład:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Przeanalizujmy kod linia po linii:

  • W linii 3 definiujemy funkcję, nadając jej nazwę i otwierając nawias klamrowy { który oznacza początek ciała funkcji. Linia 4 to ciało funkcji. Treść funkcji może zawierać wiele poleceń i deklaracji zmiennych. Linia 5 , zamykający nawias klamrowy } określa koniec funkcji hello_world linii 7 wykonujemy funkcję. Możesz wykonać tę funkcję tyle razy, ile potrzebujesz.

Jeśli uruchomisz skrypt, wydrukuje hello, world .

Zakres zmiennych

Zmienne globalne to zmienne, do których można uzyskać dostęp z dowolnego miejsca w skrypcie, niezależnie od zakresu. W Bash wszystkie zmienne są domyślnie zdefiniowane jako globalne, nawet jeśli są zadeklarowane w funkcji.

Zmienne lokalne mogą być deklarowane w treści funkcji słowem kluczowym local i mogą być używane tylko wewnątrz tej funkcji. W różnych funkcjach możesz mieć lokalne zmienne o tej samej nazwie.

Aby lepiej zilustrować działanie zakresu zmiennych w Bash, rozważmy przykład:

~ / variable_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Skrypt rozpoczyna się od zdefiniowania dwóch zmiennych globalnych var1 i var2 . Następnie funkcja, która ustawia zmienną lokalną var1 i modyfikuje zmienną globalną var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Z powyższego wyniku możemy wywnioskować, że:

  • Jeśli ustawisz zmienną lokalną w treści funkcji o takiej samej nazwie jak istniejąca zmienna globalna, będzie ona miała pierwszeństwo przed zmienną globalną. Zmienne globalne można zmienić w obrębie funkcji.

Zwracane wartości

W przeciwieństwie do funkcji w „prawdziwych” językach programowania, funkcje Bash nie pozwalają na zwrócenie wartości po wywołaniu. Po zakończeniu funkcji bash jej wartością zwracaną jest stan ostatniej instrukcji wykonanej w funkcji, 0 dla powodzenia i niezerowa liczba dziesiętna w zakresie 1 - 255 dla niepowodzenia.

Status zwrotu można określić za pomocą słowa kluczowego return i jest on przypisany do zmiennej $? . Instrukcja return kończy działanie funkcji. Możesz myśleć o tym jako o statusie wyjścia funkcji.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Aby faktycznie zwrócić dowolną wartość z funkcji, musimy użyć innych metod. Najprostszą opcją jest przypisanie wyniku funkcji do zmiennej globalnej:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Inną lepszą opcją zwrócenia wartości z funkcji jest wysłanie wartości do standardowego stdout za pomocą echa lub printf jak pokazano poniżej:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

Zamiast po prostu wykonać funkcję, która wypisze komunikat na standardowe wyjście, przypisujemy wyjście funkcji do zmiennej func_result za pomocą podstawienia polecenia $() . Zmiennej można później użyć w razie potrzeby.

Przekazywanie argumentów do funkcji Bash

Aby przekazać dowolną liczbę argumentów do funkcji bash, po prostu umieść je tuż po nazwie funkcji, oddzielając je spacją. Dobrą praktyką jest podwójne cytowanie argumentów, aby uniknąć błędnej analizy argumentu ze spacjami.

  • Przekazane parametry to $1 $2 $3 $n , odpowiadające pozycji parametru po nazwie funkcji. Zmienna $0 jest zarezerwowana dla nazwy funkcji. Zmienna $# przechowuje liczbę parametrów pozycyjnych / argumentów przekazanych do funkcja. Zmienne $* i $@ przechowują wszystkie parametry pozycyjne / argumenty przekazane do funkcji.
    • W przypadku podwójnego cudzysłowu "$*" rozwija się do pojedynczego łańcucha oddzielonego spacją (pierwszy znak IFS) - "$1 $2 $n" . Po podwójnym cudzysłowie "$@" rozwija się do oddzielnych ciągów - "$1" "$2" "$n" Gdy nie podano podwójnego cudzysłowu, $* i $@ są takie same.

Oto przykład:

~ / passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Wniosek

Funkcja Bash to blok kodu wielokrotnego użytku przeznaczony do wykonywania określonej operacji. Raz zdefiniowana funkcja może być wywoływana wiele razy w skrypcie.

Możesz także przeczytać o tym, jak używać funkcji Bash, aby utworzyć niezapomniane polecenie skrótu dla dłuższego polecenia.

terminal bash