Supponiamo che tu stia lavorando su uno script bash complesso per automatizzare una serie di attività sul tuo sistema Linux. Noti che man mano che cresce, ci sono alcune parti dello script in cui gli stessi blocchi di codice vengono ripetuti più volte. Per questo, puoi racchiudere il pezzo ripetuto all’interno di un blocco noto come “funzione” e riutilizzarlo, rendendo il codice complessivo più snello e organizzato. In questo articolo discuteremo cos’è una funzione in bash e come usarla per automatizzare le attività di Linux.
Cosa sono le funzioni Bash in Linux?
Le funzioni bash sono blocchi di codice riutilizzabili in uno script bash che possono essere raggruppati e nominati per evitare di scrivere ripetutamente lo stesso codice. Proprio come altri linguaggi di programmazione, hai la possibilità di utilizzare le funzioni nei tuoi script bash. Le funzioni ti aiutano a organizzare l’intero script in moduli più piccoli, rendendo il codice più leggibile, facile da eseguire il debug e riutilizzabile. In altre parole, le funzioni sono come uno script all’interno di uno script.
Come definire le funzioni in Bash?
Ora che hai un’idea di base di cosa sono le funzioni bash, vediamo come definirle per rendere il nostro flusso di lavoro Linux molto più semplice. La sintassi di base per definire le funzioni bash è:
<function_name>(){
<statements_to_execute>
}
Puoi anche utilizzare la versione a riga singola della sintassi precedente:
<function_name>() { <statements_to_execute>; }
Alcuni punti da ricordare sulla definizione delle funzioni bash includono:
- Ogni istruzione e comando scritto all’interno di {} è noto come corpo della funzione. Per il nome della funzione è possibile utilizzare qualsiasi cosa tranne le parole chiave, che sono parole specifiche riservate a diversi comandi.
- A differenza degli script bash convenzionali, le funzioni non vengono eseguite a meno che non vengano chiamate. Per eseguire una funzione, è necessario utilizzare il nome della funzione.
- Quando si utilizza la versione a riga singola, ogni comando scritto deve essere separato da un punto e virgola ‘;’.
- Tutte le variabili dichiarate all’interno di una funzione sono accessibili solo all’interno del corpo della funzione.
Vediamo un esempio base basato sulla sintassi sopra. Inizia creando un nuovo file negli editor di testo Linux e scrivi questo codice al suo interno:
#!/bin/bash
hello_world () {
echo 'hello, world'
}
hello_world
Si consiglia di salvare il file con lo stesso nome del nome della funzione. Per richiamare il file, scrivi semplicemente il nome della funzione all’interno del prompt della shell e premi invio.
./hello_world
Come passare argomenti alle funzioni Bash
A volte potrebbe essere necessario lavorare con alcuni valori personalizzati o lavorare con i valori di input dell’utente con le funzioni che hai creato. Per passare argomenti alla funzione bash, menzionarli semplicemente dopo il nome della funzione dopo aver invocato la funzione come variabili della shell Linux. Per quanto riguarda l’utilizzo degli argomenti all’interno della funzione, posizionateli con $<argument_position>
Piace $1
, $2
sotto e così via. Per esempio:
#!/bin/bash
greeting () {
echo "Hello $1"
}
greeting "Beebom"
Per invocare, utilizzare il seguente comando:
./greeting.sh
Come restituire il valore dalle funzioni Bash
A differenza di altri linguaggi di programmazione, in bash non è possibile restituire valori dalla funzione. Puoi inviare lo stato di ritorno dalla funzione bash al chiamante solo con qualsiasi numero compreso tra 0 e 255, dove 0 rappresenta il successo e qualsiasi altro numero come un errore/fallimento del sistema Linux. Ad esempio, copia questo codice nell’editor nano in Linux.
#!/bin/bash
greeting () {
echo "Hello $1"
return 10
}
greeting "Beebom"
echo The return value is $?
Quando chiami lo script precedente, otterrai un output simile insieme al valore 10, che indica che si è verificato un errore o un errore.
Ambito variabile nelle funzioni Bash
L’ambito di una variabile indica parti di codice in cui le variabili possono essere utilizzate in bash. L’ambito può essere suddiviso principalmente in due parti: ambito globale e ambito locale. Con l’ambito globale, la variabile può essere utilizzata ovunque, incluso direttamente nel prompt della shell. L’ambito locale significa che la variabile non può essere utilizzata all’esterno del blocco in cui è dichiarata.
Ogni variabile che dichiari all’interno di una funzione bash con la parola chiave “local” rientrerà nell’ambito locale del corpo della funzione e non potrà essere utilizzata al di fuori del corpo della funzione. Allo stesso modo, è possibile accedere alle variabili globali da qualsiasi punto dello script bash senza alcuna restrizione. Il seguente esempio lo renderà chiaro:
#!/bin/bash
global_var="I am global"
function display_global() {
echo "Inside function: $global_var"
local local_var="I am local"
echo "Inside function: $local_var"
}
display_global
echo "Outside function: $global_var"
echo "Outside function: $local_var"
Dopo aver eseguito lo script precedente, vedrai il seguente output:
Migliori pratiche per utilizzare le funzioni in Bash
Le funzioni Bash sono strumenti potenti che possono migliorare la struttura, la manutenibilità e la riusabilità degli script bash in Linux. Segui queste migliori pratiche per utilizzare le funzioni in bash che possono migliorare notevolmente il nostro flusso di lavoro:
- Mantieni le funzioni brevi e mirate: cerca di mantenere le funzioni che scrivi brevi, concise e focalizzate sull’esecuzione di una singola attività. Ciò migliorerà la leggibilità e la manutenibilità complessive dello script bash.
- Usa nomi descrittivi: utilizzare un nome breve ma descrittivo che rifletta lo scopo della funzione come nome della funzione. Nomi chiari e significativi rendono il codice più autoesplicativo, consentendo a te e ad altri sviluppatori di mantenere e sviluppare il codice.
- Aggiungi commenti: Non solo per gli script bash, ma per tutti i diversi tipi di linguaggi di programmazione su cui lavori, usa i commenti che descrivono quale parte del codice sta facendo cosa.
- Riutilizzare le funzioni: riutilizzare le funzioni ove possibile per evitare di riscrivere nuovamente lo stesso codice.
- Evita conflitti tra i nomi delle funzioni: evitare di utilizzare funzioni con lo stesso nome dei comandi integrati e di altri strumenti da riga di comando.