Usa le funzioni in Bash

Suraj Joshi 12 aprile 2021
  1. Definisci le funzioni in Bash
  2. Ambito delle variabili in Bash
  3. Valori restituiti dalla funzione in Bash
  4. Passa argomenti a una funzione Bash
Usa le funzioni in Bash

Una funzione è uno degli aspetti più importanti di ogni linguaggio di programmazione e rende il nostro codice riutilizzabile e leggibile. Lo stesso codice utilizzato ripetutamente viene scritto all’interno di una funzione. E quando abbiamo bisogno del blocco di codice, chiamiamo semplicemente la funzione definita.

Definisci le funzioni in Bash

Per definire le funzioni in Bash, possiamo utilizzare uno dei seguenti due approcci:

In questo approccio, scriviamo il nome della funzione seguito da parentesi. Quindi definiamo le funzioni all’interno delle parentesi graffe. Le funzioni che utilizzano questo formato possono essere definite utilizzando uno qualsiasi dei formati:

function_name(){
statements
}
function_name() { statements }

In questo approccio, specifichiamo la parola chiave funzione prima del nome della funzione.

function_name(){
statements
}
function_name() { statements }

Le istruzioni all’interno delle parentesi graffe determinano cosa fa la funzione. Il nome della funzione non ha nulla a che fare con ciò che fa la funzione, ma dobbiamo rendere i nomi delle funzioni descrittivi. La definizione della funzione non farà nulla. Per eseguire i comandi nella definizione della funzione, dobbiamo chiamare la funzione.

Per chiamare la funzione in Bash, usiamo il nome della funzione.

#! /bin/bash

greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Produzione:

Hello, Folks. Welcome to DelftStack!

Qui, definiamo la funzione all’inizio con il nome greet e quindi chiamiamo la funzione. Quando chiamiamo la funzione, vengono eseguite le istruzioni all’interno di una definizione di funzione, e quindi vediamo Hello, Folks. Welcome to DelftStack! stampato nel terminale.

Possiamo anche definire la funzione utilizzando un altro approccio come:

#! /bin/bash

function greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Produzione:

Hello, Folks. Welcome to DelftStack!

Dobbiamo assicurarci di definire sempre la funzione prima di chiamarla.

Ambito delle variabili in Bash

L’ambito delle variabili può essere globale o locale in Bash come in altri linguaggi di programmazione. Tuttavia, l’ambito predefinito delle variabili è sempre globale, anche se dichiarato all’interno dell’ambito della funzione. Dobbiamo usare la parola chiave local per rendere locale una variabile.

#! /bin/bash

gvar1=1
gvar2=2

change_variables() {

    local gvar1=10
    gvar2=7
    
    echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}

echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"

change_variables

echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"

Produzione:

Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7

Qui, gvar1 e gvar2 dichiarati in alto sono variabili globali.

All’interno della funzione, gvar1 è dichiarato come variabile locale poiché usiamo la parola chiave local con gvar1 mentre gvar2 si riferisce ancora a una variabile globale poiché non ha una parola chiave local. Quindi, il valore di gvar2 viene cambiato globalmente dalla funzione mentre il valore di gvar1 viene cambiato solo all’interno della funzione.

Valori restituiti dalla funzione in Bash

Contrariamente ad altri linguaggi di programmazione, Bash non ci consente di restituire valori dalla funzione. Il valore restituito dalla funzione Bash è lo stato dell’ultima istruzione eseguita nella funzione. Il numero 0 rappresenta il successo, mentre il numero da 1-255 rappresenta il fallimento. Possiamo specificare lo stato di uscita della funzione utilizzando la parola chiave return. Anche l’istruzione return termina la funzione.

#! /bin/bash

return_value(){
  echo "This function returns 20!"
  return 30
  echo "After return statement"
}

return_value
echo $?

Produzione:

This function returns 20!
30

Qui, possiamo vedere che la funzione return_value restituisce il valore 30 utilizzando l’istruzione return e il valore è assegnato a $? variabile.

Possiamo anche notare che la funzione viene terminata dopo che l’istruzione return è stata eseguita poiché i comandi sotto l’istruzione return non vengono eseguiti.

Se vogliamo restituire un valore da una funzione, possiamo assegnare il valore a una variabile globale e accedere alla variabile dall’esterno della funzione per recuperare il valore.

#! /bin/bash

send_message(){
  message_from_function="Hello From the function!"
}
send_message
echo $message_from_function

Produzione:

Hello From the function!

Nel programma, assegniamo il valore da restituire alla variabile globale message_from_function e quindi accediamo al valore restituito dalla variabile.

Passa argomenti a una funzione Bash

Per passare argomenti a una funzione Bash, mettiamo semplicemente gli argomenti dopo la funzione. Se vogliamo passare più di un argomento a una funzione, separiamo gli argomenti con uno spazio. Per evitare errori di interpretazione degli argomenti, possiamo racchiudere gli argomenti tra virgolette doppie.

Si accede ai parametri con $1 $2 e così via in base alla loro posizione. $0 rappresenta il nome della funzione mentre $# contiene il numero di argomenti posizionali nella funzione.

#! /bin/bash

send_message(){
  message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"

Produzione:

Hello Delft!

Qui, l’argomento Delft! è passato nella funzione e vi si accede nella funzione dal parametro $1, e otteniamo Hello Delft! come output finale della funzione.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn