Android

Funcții Bash

20.Linux для Начинающих - Скрипты Linux Bash, Часть-2

20.Linux для Начинающих - Скрипты Linux Bash, Часть-2

Cuprins:

Anonim

O funcție Bash este în esență un set de comenzi care pot fi numite de mai multe ori. Scopul unei funcții este de a vă ajuta să faceți scripturile bash mai lizibile și să evitați scrierea repetată a aceluiași cod.

Comparativ cu majoritatea limbajelor de programare, funcțiile Bash sunt oarecum limitate. În acest tutorial, vom acoperi elementele de bază ale funcțiilor Bash și vă vom arăta cum să le utilizați în scripturile dvs. shell.

Declarația funcției Bash

Sintaxa pentru declararea unei funcții bash este foarte simplă. Acestea pot fi declarate în două formate diferite:

  1. Primul format începe cu numele funcției, urmat de paranteze. Acesta este formatul preferat și mai utilizat.

    function_name () { commands }

    Versiune cu o singură linie:

    function_name () { commands; }

    Al doilea format începe cu cuvântul rezervat function urmat de numele funcției.

    function function_name { commands }

    Versiune cu o singură linie:

    function function_name { commands; }

Puține puncte de remarcat:

  • Lista de comenzi între bretele cretate {} este corpul funcției. Bretelele cret care înconjoară corpul funcției trebuie să fie separate de corp prin spații sau linii noi. Definirea unei funcții nu o execută. Pentru a invoca o funcție bash, pur și simplu folosiți numele funcției. Comenzile dintre bretelele cret sunt executate ori de câte ori funcția este apelată în scriptul shell.Definirea funcției trebuie plasată înainte de apelurile către funcție. Când se utilizează funcții „compactate” cu o singură linie, un punct și virgulă ; trebuie să urmați ultima comandă din funcție. Trebuie să încercați să mențineți numele funcțiilor descriptive.

Pentru a înțelege mai bine acest lucru, aruncați o privire la următorul exemplu:

~ / Hello_world.sh

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

Să analizăm codul linie după linie:

  • În linia 3 definim funcția, dându-i un nume și deschizând bretonul ondulat { care marchează începutul corpului funcției. Linia 4 este corpul funcției. Corpul funcției poate conține mai multe comenzi și declarații variabile. Linia 5 , paranteza hello_world } , definește sfârșitul funcției hello_world linia 7 executăm funcția. Puteți executa funcția de câte ori aveți nevoie.

Dacă rulați scriptul, acesta va imprima hello, world .

Domeniul variabilelor

Variabilele globale sunt variabile care pot fi accesate de oriunde în script, indiferent de sfera de aplicare. În Bash, toate variabilele implicit sunt definite drept globale, chiar dacă sunt declarate în interiorul funcției.

Variabilele locale pot fi declarate în cadrul corpului funcției cu ajutorul cuvântului cheie local și pot fi utilizate numai în interiorul acestei funcții. Puteți avea variabile locale cu același nume în funcții diferite.

Pentru a ilustra mai bine cum funcționează domeniul de aplicare al variabilelor în Bash, să luăm în considerare un exemplu:

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

Scriptul începe prin definirea a două variabile globale var1 și var2 . Apoi, o funcție care stabilește o variabilă locală var1 și modifică variabila globală var2 .

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

Din rezultatele de mai sus, putem concluziona că:

  • Dacă setați o variabilă locală în interiorul corpului funcției cu același nume ca o variabilă globală existentă, aceasta va avea prioritate față de variabila globală. Variabilele globale pot fi modificate din funcție.

Valori de retur

Spre deosebire de funcțiile din limbajele de programare „reale”, funcțiile Bash nu vă permit să returnați o valoare atunci când sunteți. Când se finalizează o funcție bash, valoarea sa returnată este starea ultimei instrucțiuni executate în funcție, 0 pentru succes și număr zecimal non-zero în intervalul 1 - 255 pentru eșec.

Starea de retur poate fi specificată folosind cuvântul cheie return și este atribuită variabilei $? . Declarația de return încheie funcția. Puteți crede că este starea de ieșire a funcției.

~ / Return_values.sh

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

some result 55

Pentru a returna efectiv o valoare arbitrară dintr-o funcție, trebuie să utilizăm alte metode. Cea mai simplă opțiune este de a atribui rezultatul funcției unei variabile globale:

~ / Return_values.sh

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

some result

O altă opțiune, mai bună pentru a returna o valoare dintr-o funcție, este de a trimite valoarea pe stdout folosind ecou sau printf cum este arătat mai jos:

~ / Return_values.sh

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

some result

În loc să executăm pur și simplu funcția care va tipări mesajul pe stdout, atribuim ieșirea funcției la variabila func_result folosind substituția comenzii $() . Variabila poate fi utilizată ulterior, după cum este necesar.

Trecerea de argumente funcțiilor Bash

Pentru a trece orice număr de argumente la funcția bash pur și simplu puneți-le imediat după numele funcției, despărțite de un spațiu. Este o practică bună să cotați dublu argumentele pentru a evita greșirea unui argument cu spații în el.

  • Parametrii trecuți sunt $1 , $2 , $3 $n , corespunzând poziției parametrului după numele funcției. Variabila $0 este rezervată numelui funcției. Variabila $# deține numărul de parametri / argumente poziționale transmise la funcție. Variabilele $* și $@ conțin toți parametrii / argumentele poziționale transmise funcției.
    • Când este citat dublu, "$*" se extinde într-un singur șir separat prin spațiu (primul caracter al IFS) - "$1 $2 $n" . Când este citat dublu, "$@" se extinde la șiruri separate - "$1" "$2" "$n" . Când nu sunt citate dublu, $* și $@ sunt la fel.

Iată un exemplu:

~ / Passing_arguments.sh

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

Hello Joe

Concluzie

O funcție Bash este un bloc de cod reutilizabil conceput pentru a efectua o anumită operație. Odată definită, funcția poate fi numită de mai multe ori într-un script.

De asemenea, poate doriți să citiți despre cum să utilizați o funcție Bash pentru a crea o comandă de scurtătură memorabilă pentru o comandă mai lungă.

terminalul bash