Android

Bash funkciók

Bash shell szkriptelés - Function (funkciók a szkriptben)

Bash shell szkriptelés - Function (funkciók a szkriptben)

Tartalomjegyzék:

Anonim

A Bash funkció lényegében olyan parancsok halmaza, amelyek sokszor meghívhatók. A funkció célja, hogy segítsen a bash szkriptek olvashatóbbá tételében, és elkerülje ugyanazon kód újra és újra írását.

A legtöbb programozási nyelvhez képest a Bash funkciók kissé korlátozottak. Ebben az oktatóanyagban bemutatjuk a Bash funkcióinak alapjait, és megmutatjuk, hogyan kell ezeket használni a shell parancsfájljaiban.

Bash Funkció Nyilatkozat

A bash függvény deklarálásának szintaxisa nagyon egyszerű. Két különböző formátumban deklarálhatók:

  1. Az első formátum a funkció nevével kezdődik, amelyet zárójelek követnek. Ez az előnyben részesített és jobban használt formátum.

    function_name () { commands }

    Egysoros verzió:

    function_name () { commands; }

    A második formátum a function számára fenntartott szóval kezdődik, amelyet a funkció neve követ.

    function function_name { commands }

    Egysoros verzió:

    function function_name { commands; }

Néhány szempont, amit meg kell jegyezni:

  • A {} göndör kapcsok közötti parancslista a függvény testét jelenti. A funkcionális testet körülvevő göndör kapcsolót szóközzel vagy új vonallal kell elválasztani a testtől. A függvény meghatározása nem hajtja végre. A bash függvény meghívásához egyszerűen használja a függvény nevét. A göndör zárójelek közötti parancsok akkor kerülnek végrehajtásra, amikor a függvényt meghívják a shell parancsfájlba. A függvény meghatározását a függvény meghívása előtt el kell helyezni.Ha egysoros „tömörített” funkciókat használ, pontosvesszőt ; a függvény utolsó parancsát kell követnie. Mindig meg kell próbálnia a funkcióneveket leírónak tartani.

Ennek jobb megértése érdekében vessünk egy pillantást a következő példára:

~ / Hello_world.sh

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

Elemezzük a kódot soronként:

  • A 3 sorban a függvényt úgy definiáljuk, hogy nevet adunk neki, és kinyitjuk a göndör tartót { , amely a funkció testének kezdetét jelzi. A 4 a funkció test. A függvénytest több parancsot és változó deklarációt tartalmazhat. Az 5 , a záró hello_world } meghatározza a hello_world függvény hello_world 7 sorban a funkciót hello_world végre. A funkciót annyiszor hajthatja végre, amennyire szüksége van.

Ha futtatja a szkriptet, az kinyomtatja a hello, world .

Változók köre

A globális változók olyan változók, amelyekhez a szkript bárhonnan hozzáférhet, függetlenül a hatálytól. A Bash alkalmazásban alapértelmezés szerint az összes változó globális, még akkor is, ha a függvényben deklarálva vannak.

A helyi változók a függvénytesten belül a local kulcsszóval deklarálhatók, és csak ezen a funkción belül használhatók. A különböző függvényekben azonos nevű helyi változók is lehetnek.

A változók hatókörének Bash-ban való jobb bemutatása érdekében vegyünk egy példát:

~ / Variables_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"

A szkript két globális var1 és var2 meghatározásával kezdődik. Ezután egy függvény, amely beállítja a var1 helyi változót és módosítja a var2 globális változót.

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

A fenti kimenetből arra következtethetünk, hogy:

  • Ha a funkcionális test belsejében egy helyi változót azonos nevű, mint egy létező globális változóval állít be, akkor elsőbbséget élvez a globális változóval szemben. A globális változók a függvényen belül megváltoztathatók.

Visszatérési értékek

A „valódi” programozási nyelvektől eltérően, a Bash funkciók nem teszik lehetővé az érték visszaadását híváskor. Amikor a bash függvény befejeződik, annak visszatérési értéke a függvényben végrehajtott utolsó utasítás állapota, 0 siker esetén és nulla tizedes szám az 1 - 255 tartományban a hiba esetén.

A visszatérési állapot meghatározható a return kulcsszó használatával, és a $? Változóhoz van hozzárendelve $? . A return nyilatkozat megszünteti a funkciót. Gondolhat úgy, mint a függvény kilépési állapotára.

~ / Return_values.sh

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

some result 55

A függvény tetszőleges értékének való visszatéréséhez más módszereket kell használnunk. A legegyszerűbb lehetőség a függvény eredményének hozzárendelése egy globális változóhoz:

~ / Return_values.sh

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

some result

Egy másik, jobb lehetőség az érték visszaadására egy funkciótól, ha az értéket az stdout ra küldi echo vagy printf , az alább látható módon:

~ / Return_values.sh

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

some result

Ahelyett, hogy végrehajtanánk azt a funkciót, amely kinyomtatja az üzenetet az stdout-ra, a $() parancs helyettesítésével a funkció kimenetet rendeljük a func_result változóhoz. A változó később szükség szerint felhasználható.

Érvek átadása a bash funkciókhoz

Ha tetszőleges számú érvet továbbít a bash függvényhez, egyszerűen tegye őket jobbra a függvény neve után, szóközzel elválasztva. Jó gyakorlat az érvek kettős idézése, hogy elkerüljék az érvelés téves értelmezését.

  • Az átadott paraméterek $1 , $2 , $3 $n , ami a paraméter pozíciójának felel meg a függvény neve után. A $0 változó a függvény neve számára van fenntartva. A $# változó a helyhez tartozó paraméterek / argumentumok számát tartalmazza a function.A $* és $@ változók az összes pozíciós paramétert / argumentumot tartalmazzák a függvényhez.
    • Kettős idézés esetén a "$*" egyetlen, szóközzel elválasztott karakterláncra bővül (az IFS első karaktere) - "$1 $2 $n" .Kettős idézés esetén a "$@" külön karakterláncokra terjed ki - "$1" "$2" "$n" .Ha nem történik dupla idézés, a $* és a $@ azonosak.

Íme egy példa:

~ / Passing_arguments.sh

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

Hello Joe

Következtetés

A Bash funkció egy újrafelhasználható kód egy adott blokkja, amelyet egy adott művelet végrehajtására terveztek. Miután meghatározta, a függvény többször is meghívható egy szkriptben.

Érdemes elolvasni arról is, hogyan lehet a Bash funkciót felhasználni egy emlékezetes parancsikon létrehozására egy hosszabb parancshoz.

bash terminál