Articles

Funzioni Bash

Posted by admin

Una funzione Bash è essenzialmente un insieme di comandi che possono essere chiamati numerose volte. Lo scopo di una funzione è quello di aiutarti a rendere i tuoi script bash più leggibili e di evitare di scrivere ripetutamente lo stesso codice. Rispetto alla maggior parte dei linguaggi di programmazione, le funzioni Bash sono alquanto limitate.

In questo tutorial, tratteremo le basi delle funzioni Bash e vi mostrerà come usarli nei vostri script di shell.

Definizione delle funzioni Bash #

La sintassi per dichiarare una funzione bash è semplice., Le funzioni possono essere dichiarate in due diversi formati:

  1. Il primo formato inizia con il nome della funzione, seguito da parentesi. Questo è il formato preferito e più utilizzato.

    function_name () { commands}

    linea Singola versione:

    function_name () { commands; }
  2. Il secondo formato, inizia con la parola riservata function, seguito dal nome della funzione.,

    function function_name { commands}

    linea Singola versione:

    function function_name { commands; }

Alcuni punti da notare:

  • I comandi tra parentesi graffe ({}) sono chiamati il corpo della funzione. Le parentesi graffe devono essere separate dal corpo da spazi o newline.
  • La definizione di una funzione non la esegue. Per richiamare una funzione bash, è sufficiente utilizzare il nome della funzione. I comandi tra le parentesi graffe vengono eseguiti ogni volta che la funzione viene chiamata nello script della shell.,
  • La definizione della funzione deve essere posizionata prima di qualsiasi chiamata alla funzione.
  • Quando si utilizzano funzioni “compattate” a riga singola, un punto e virgola; deve seguire l’ultimo comando nella funzione.
  • Cerca sempre di mantenere i nomi delle funzioni descrittivi.

Per capire meglio questo, date un’occhiata al seguente esempio:

~/hello_world.sh
#!/bin/bashhello_world () { echo 'hello, world'}hello_world

vediamo di analizzare il codice riga per riga:

  • Nella riga 3, stiamo definendo la funzione dandogli un nome., La parentesi graffa { segna l’inizio del corpo della funzione.
  • Linea 4 è il corpo della funzione. Il corpo della funzione può contenere più comandi, istruzioni e dichiarazioni di variabili.
  • Linea 5, la parentesi graffa di chiusura }, definisce la fine della funzione hello_world.
  • In linea 7 stiamo eseguendo la funzione. È possibile eseguire la funzione tutte le volte che è necessario.,

Se si esegue lo script, verrà stampato hello, world.

Variabili Scope #

Le variabili globali sono variabili a cui è possibile accedere da qualsiasi punto dello script indipendentemente dall’ambito. In Bash, tutte le variabili di default sono definite come globali, anche se dichiarate all’interno della funzione.

Le variabili locali possono essere dichiarate all’interno del corpo della funzione con la parola chiavelocal e possono essere utilizzate solo all’interno di tale funzione. È possibile avere variabili locali con lo stesso nome in diverse funzioni.,

Per illustrare meglio come funziona l’ambito delle variabili in Bash, consideriamo questo esempio:

~/variables_scope.sh

Lo script inizia definendo due variabili globalivar1evar2. Poi c’è una funzione che imposta una variabile locale var1 e modifica la variabile globale var2.,

Se si esegue lo script, si dovrebbe vedere il seguente output:

Before executing function: var1: A, var2: BInside function: var1: C, var2: DAfter executing function: var1: A, var2: D

l’output di sopra, si può concludere che:

  • Quando una variabile locale è situato all’interno del corpo della funzione con lo stesso nome di una variabile globale, avrà la precedenza su la variabile globale.
  • Le variabili globali possono essere modificate dall’interno della funzione.

Return Values #

A differenza delle funzioni nei linguaggi di programmazione “reali”, le funzioni Bash non consentono di restituire un valore quando vengono chiamate., Quando una funzione bash viene completata, il suo valore di ritorno è lo stato dell’ultima istruzione eseguita nella funzione, 0 per il successo e il numero decimale diverso da zero nell’intervallo 1-255 per il fallimento.

Lo stato di ritorno può essere specificato utilizzando la parola chiave return e viene assegnato alla variabile $?. L’istruzionereturn termina la funzione. Puoi considerarlo come lo stato di uscita della funzione .

~ / return_values.,sh
#!/bin/bashmy_function () { echo "some result" return 55}my_functionecho $?
some result55

Per restituire effettivamente un valore arbitrario da una funzione, dobbiamo usare altri metodi. L’opzione più semplice è quello di assegnare il risultato della funzione di una variabile globale:

~/return_values.sh
#!/bin/bashmy_function () { func_result="some result"}my_functionecho $func_result
some result

un Altro, migliore opzione per restituire un valore da una funzione per inviare il valore di stdout utilizzo di eco, o un printf come mostrato di seguito:

~/return_values.,sh
#!/bin/bashmy_function () { local func_result="some result" echo "$func_result"}func_result="$(my_function)"echo $func_result
some result

Invece di eseguire semplicemente la funzione che stamperà il messaggio su stdout, stiamo assegnando l’output della funzione alla variabilefunc_result usando$() sostituzione dei comandi. La variabile può essere successivamente utilizzata secondo necessità.

Passaggio di argomenti alle funzioni Bash #

Per passare un numero qualsiasi di argomenti alla funzione bash è sufficiente metterli subito dopo il nome della funzione, separati da uno spazio., È buona norma citare due volte gli argomenti per evitare l’errore di analisi di un argomento con spazi al suo interno.

Ecco un esempio:

~/passing_arguments.sh
#!/bin/bashgreeting () { echo "Hello $1"}greeting "Joe"
Hello Joe

Conclusione #

Bash funzione è un blocco di codice riutilizzabile progettato per eseguire una particolare operazione. Una volta definita, la funzione può essere chiamata più volte all’interno di uno script.

Potresti anche voler leggere come usare una funzione Bash per creare un comando di scelta rapida memorabile per un comando più lungo.

Leave A Comment