Corso sugli script bash parte 11 - le funzioni
Sommario:
- Dichiarazione della funzione Bash
- Ambito delle variabili
- Valori di restituzione
- Passare argomenti alle funzioni Bash
- Conclusione
Una funzione Bash è essenzialmente un insieme di comandi che possono essere richiamati più volte. Lo scopo di una funzione è aiutarti a rendere più leggibili i tuoi script bash ed evitare di scrivere più volte lo stesso codice.
Rispetto alla maggior parte dei linguaggi di programmazione, le funzioni di Bash sono piuttosto limitate. In questo tutorial, tratteremo le basi delle funzioni di Bash e ti mostreremo come usarle negli script della shell.
Dichiarazione della funzione Bash
La sintassi per dichiarare una funzione bash è molto semplice. Possono essere dichiarati in due diversi formati:
-
Il primo formato inizia con il nome della funzione, seguito da parentesi. Questo è il formato preferito e più usato.
function_name () { commands }Versione a linea singola:
function_name () { commands; }Il secondo formato inizia con la parola riservata della
functionseguita dal nome della funzione.function function_name { commands }Versione a linea singola:
function function_name { commands; }
Pochi punti da notare:
- L'elenco dei comandi tra parentesi graffe
{}è il corpo della funzione. Le parentesi graffe che circondano il corpo della funzione devono essere separate dal corpo da spazi o righe. La definizione di una funzione non la esegue. Per invocare una funzione bash, utilizzare semplicemente 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 le funzioni "compattate" su una riga, un punto e virgola;deve seguire l'ultimo comando nella funzione. Dovresti sempre provare a mantenere descrittivi i nomi delle tue funzioni.
Per capirlo meglio, dai un'occhiata al seguente esempio:
~ / Hello_world.sh
#!/bin/bash hello_world () { echo 'hello, world' } hello_world
Analizziamo il codice riga per riga:
- Nella riga
3stiamo definendo la funzione assegnandole un nome e aprendo la parentesi graffa{che segna l'inizio del corpo della funzione. La linea4è il corpo della funzione. Il corpo della funzione può contenere più comandi e dichiarazioni variabili. La riga5, la parentesi graffa di chiusura}, definisce la fine della funzionehello_worldriga7stiamo eseguendo la funzione. È possibile eseguire la funzione tutte le volte che è necessario.
Se esegui la sceneggiatura, verrà stampato
hello, world
.
Ambito delle variabili
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 globali, anche se dichiarate all'interno della funzione.
Le variabili locali possono essere dichiarate all'interno del corpo della funzione con la parola chiave
local
e possono essere utilizzate solo all'interno di tale funzione. Puoi avere variabili locali con lo stesso nome in diverse funzioni.
Per illustrare meglio come funziona l'ambito delle variabili in Bash, consideriamo un esempio:
~ / 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"
Lo script inizia definendo due variabili globali
var1
e
var2
. Quindi una funzione che imposta una variabile locale
var1
e modifica la variabile globale
var2
.
Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D
Dall'output sopra, possiamo concludere che:
- Se si imposta una variabile locale all'interno del corpo della funzione con lo stesso nome di una variabile globale esistente, avrà la precedenza sulla variabile globale. Le variabili globali possono essere modificate all'interno della funzione.
Valori di restituzione
A differenza delle funzioni nei linguaggi di programmazione "reali", le funzioni di Bash non consentono di restituire un valore quando vengono chiamate. Quando una funzione bash viene completata, il suo valore restituito è lo stato dell'ultima istruzione eseguita nella funzione,
0
per successo e numero decimale diverso da zero nell'intervallo 1 - 255 per errore.
Lo stato di restituzione può essere specificato usando la parola chiave
return
ed è assegnato alla variabile
$?
. L'istruzione
return
termina la funzione. Puoi considerarlo come lo stato di uscita della funzione.
#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?
some result 55
Per restituire effettivamente un valore arbitrario da una funzione, dobbiamo usare altri metodi. L'opzione più semplice è assegnare il risultato della funzione a una variabile globale:
~ / Return_values.sh
#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result
some result
Un'altra opzione migliore per restituire un valore da una funzione è di inviare il valore a
stdout
usando echo o
printf
come mostrato di seguito:
#!/bin/bash my_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 variabile
func_result
usando la sostituzione del comando
$()
. La variabile può essere successivamente utilizzata secondo necessità.
Passare argomenti alle funzioni Bash
Per passare un numero qualsiasi di argomenti alla funzione bash, inseriscili subito dopo il nome della funzione, separati da uno spazio. È buona norma citare due volte gli argomenti per evitare di analizzare erroneamente un argomento con spazi all'interno.
- I parametri passati sono
$1,$2,$3…$n, corrispondenti alla posizione del parametro dopo il nome della funzione. La variabile$0è riservata al nome della funzione. La variabile$#contiene il numero di parametri / argomenti posizionali passati al Le variabili$*e$@contengono tutti i parametri / argomenti posizionali passati alla funzione.- Quando è racchiuso tra virgolette doppie,
"$*"espande in una singola stringa separata da spazio (il primo carattere di IFS) -"$1 $2 $n".Quando tra virgolette doppie,"$@"espande in stringhe separate -"$1" "$2" "$n". Quando non sono quotati due volte,$*e$@sono uguali.
- Quando è racchiuso tra virgolette doppie,
Ecco un esempio:
~ / Passing_arguments.sh
#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"
Conclusione
Una funzione Bash è un blocco di codice riutilizzabile progettato per eseguire una particolare operazione. Una volta definita, la funzione può essere richiamata più volte all'interno di uno script.
Puoi anche leggere come utilizzare una funzione Bash per creare un comando di scelta rapida memorabile per un comando più lungo.
bash terminalGPS: più funzioni, a prezzi inferiori
Sia che tu voglia solo una buona navigazione di base o molte funzioni extra, queste unità GPS portatili da auto hanno vinto Ti costa un braccio e una gamba.
Snagit 9.1 introduce funzioni di modifica utili
Di norma, non ci si aspetta che una versione 9.1 abbia molti miglioramenti rispetto alla versione 9.0. Questa nuova versione del programma di cattura e modifica dello schermo Snagit è l'eccezione a questa regola.
Fujitsu ScanSnap S1500 introduce nuove funzioni di scansione al CES
Il nuovo Fujitsu ScanSnap S1500 vanta una serie di nuove funzionalità di gestione dei documenti per aiutare gli utenti a organizzarsi meglio con meno problemi.







