GNU/Linux >> Linux Esercitazione >  >> Linux

Funzione Bash e come usarla {Variabili, argomenti, ritorno}

Introduzione

Una funzione bash è un metodo utilizzato negli script di shell per raggruppare blocchi di codice riutilizzabili. Questa funzione è disponibile per la maggior parte dei linguaggi di programmazione, conosciuti con nomi diversi come procedure, metodi o subroutine.

Questo articolo fornisce una panoramica completa delle funzioni bash, come funzionano e come utilizzarle.

Prerequisiti

  • Un sistema che esegue Linux.
  • Accesso al terminale e alla shell Bash.
  • Un editor di testo per scrivere script bash (la guida utilizza Vim).

Cosa sono le funzioni Bash?

Una funzione bash è una tecnica per raggruppare bit di codice riutilizzabili sotto un nome per un uso successivo. La funzione bash è come uno script all'interno di uno script.

L'uso delle funzioni nello scripting bash comporta due vantaggi :

1. Una funzione viene letta direttamente nella memoria della shell e archiviata per un uso successivo. Dal momento che la memoria del computer non è un problema al giorno d'oggi, l'utilizzo delle funzioni è più veloce rispetto alla ripetizione del codice.

2. Le funzioni aiutano a organizzare lunghi script di shell in blocchi di codice modulari e riutilizzabili. I blocchi sono più facili da sviluppare e mantenere .

Come utilizzare le funzioni Bash?

Esistono due modi per implementare le funzioni Bash:

  • All'interno di uno script di shell, dove la definizione della funzione deve essere prima di qualsiasi chiamata alla funzione.
  • Accanto ad altri comandi alias bash e direttamente nel terminale come comando.

Per utilizzare le funzioni bash, segui i contorni seguenti.

Sintassi della funzione Bash

Esistono due modi diversi per dichiarare una funzione bash:

1. Il formato più utilizzato è:

<function name> () { 
        <commands> 
}

In alternativa, la stessa funzione può essere una riga:

<function name> () { <commands>; }

2. Il modo alternativo per scrivere una funzione bash è usare la parola riservata function :

function <function name> {
        <commands>
}

O in una riga:

function <function name> { <commands>; }

Prendi nota dei seguenti comportamenti e suggerimenti quando utilizzi le funzioni:

  • Quando si scrive in una riga, i comandi devono terminare con un punto e virgola (; ), sia negli script bash che direttamente dal terminale.
  • Aggiunta della function la parola riservata rende le parentesi facoltative.
  • I comandi tra parentesi graffe { <commands> } sono chiamati il ​​corpo della funzione . Il corpo può contenere un numero qualsiasi di dichiarazioni, variabili, cicli o istruzioni condizionali.
  • Cerca di usare nomi descrittivi per le funzioni. Sebbene non siano necessari durante il test di funzioni e comandi, i nomi descrittivi aiutano nelle impostazioni in cui altri sviluppatori esaminano il codice.

Come dichiarare e chiamare una funzione?

Una funzione non viene eseguita quando dichiarata. Il corpo della funzione viene eseguito quando viene richiamato dopo la dichiarazione. Segui i passaggi seguenti per creare uno script bash con varie opzioni di sintassi:

1. Utilizzando il tuo editor di testo preferito, crea uno script di shell chiamato sintassi . Se stai usando Vim, esegui la seguente riga nel terminale:

vim syntax.sh

2. Aggiungi il codice seguente allo script della shell:

# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
        echo Hello I\'m function 1
        echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }

# Declaring functions without the function reserved word
# Multiline
f3 () { 
        echo Hello I\'m function 3
        echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }

# Invoking functions
f4
f3
f2
f1

Lo script esegue le seguenti operazioni:

  • Righe 4-9 dimostrare come definire una funzione usando la function parola riservata. La funzione f1 utilizza una sintassi multilinea nelle righe 4-6, mentre f2 utilizza la sintassi di una riga sulla riga 9.
  • Righe 13-18 mostra la sintassi più familiare. f3 è una funzione multilinea definita nelle righe 13-16, mentre f4 sulla riga 18 è l'equivalente di riga singola.
  • Righe 21-24 richiamare le funzioni precedentemente definite ed eseguire i comandi nei corpi delle funzioni corrispondenti. Le chiamate vengono effettuate in ordine inverso rispetto alla definizione.

3. Salva lo script e chiudi Vim:

:wq

4. Crea il syntax.sh file eseguibile:

chmod +x syntax.sh

5. Infine, esegui lo script per vedere l'output:

./syntax.sh

Come dichiarare e chiamare una funzione nel terminale?

Per dichiarare e utilizzare una funzione nel terminale:

1. Apri il terminale e inserisci la seguente riga:

my_function () { echo "Hello I'm a function"; echo "Bye!"; }

2. Eseguire la funzione inserendo il nome della funzione nel terminale:

my_function

L'output esegue i comandi nel corpo della funzione.

La funzione rimane definita solo nella sessione del terminale corrente. Per salvare per sessioni future, aggiungi il codice a ~/.bashrc file.

Dov'è definita una funzione Bash?

Per vedere dove è definita una funzione bash e il suo contenuto, inserisci i seguenti comandi nel terminale:

1. Esegui la shell bash in modalità debugger:

bash --debugger

2. Controllare il file sorgente della funzione con:

declare -F <function name>

Ad esempio:

declare -F my_function

L'output stampa il nome della funzione, il numero di riga e la posizione del file in cui si trova la definizione della funzione.

3. Per vedere il contenuto della funzione, eseguire:

declare -f <function name>

Ad esempio:

declare -f my_function

La declare la modalità di debug integrata consente di visualizzare il contenuto e la posizione della funzione senza eseguire il codice.

Come eliminare una funzione Bash?

Se hai bisogno di liberare uno spazio dei nomi occupato da una funzione nella sessione del terminale corrente, esegui:

unset <function name>

Ad esempio:

unset my_function

La funzione non è più disponibile nella sessione del terminale corrente. Tuttavia, se il codice è in ~/.bashrc file, tutto viene ripristinato alla normalità nella sessione successiva.

Variabili della funzione Bash

Le variabili in bash sono globali per impostazione predefinita e accessibili da qualsiasi luogo, inclusi i corpi delle funzioni. Anche le variabili definite all'interno di una funzione sono globali. Aggiunta della parola chiave local rende il termine accessibile solo all'interno della funzione e delle funzioni/processi figlio.

In ambito dinamico , una variabile locale ombreggia una variabile globale quando le due portano lo stesso nome.

Prova il seguente script bash per dimostrare come funzionano le variabili di funzione in bash:

1. Crea uno script chiamato variable.sh :

vim variable.sh

2. Aggiungi il seguente codice allo script:

var1=1
var2=1
change() {
        echo Inside function
        echo Variable 1 is: $var1
        echo Variable 2 is: $var2
        local var1=5
        var2=5
        echo
        echo After change inside function
        echo Variable 1 is locally $var1
        echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2

Lo script mostra quanto segue:

  • Righe 1-2 dichiarare le variabili var1 e var2 e impostali entrambi su 1 .
  • Righe 5-6 sono all'interno del corpo della funzione e stampano le variabili sulla console. Poiché l'ambito della variabile è globale, vengono stampati i valori originali.
  • Riga 7 dichiara una nuova variabile locale con lo stesso nome della variabile globale var1 . La local var1 oscura la var1 globale valore dovuto all'ambito dinamico.
  • Riga 8 cambia il valore della var2 globale variabile.
  • Righe 14-22 stampa i valori delle variabili prima e dopo aver chiamato la funzione.

3. Salva lo script ed esci da Vim:

:wq

4. Modifica le autorizzazioni del file in eseguibile:

chmod +x variable.sh

5. Eseguire lo script e analizzare i risultati:

./variable.sh

I valori delle variabili vengono stampati sulla console tramite le modifiche apportate allo script.

Argomenti della funzione Bash

Per passare argomenti a una funzione, aggiungi i parametri dopo la chiamata di funzione separati da spazi. La tabella seguente delinea le opzioni disponibili quando si lavora con gli argomenti della funzione bash.

Argomento Ruolo
$0 Riserva il nome della funzione quando definita nel terminale. Quando definito in uno script bash, $0 restituisce il nome e la posizione dello script.
$1 , $2 , ecc. Corrisponde alla posizione dell'argomento dopo il nome della funzione.
$# Contiene il conteggio degli argomenti posizionali passati alla funzione.
[email protected] e $* Mantieni l'elenco degli argomenti posizionali e funziona allo stesso modo se usato in questo modo.
"[email protected]" Espande l'elenco in stringhe separate. Ad esempio "$1", "$2" , ecc.
"$*" Espande l'elenco in un'unica stringa, separando i parametri con uno spazio. Ad esempio "$1 $2" ecc.

Segui i passaggi seguenti per verificare come funzionano i vari argomenti in una funzione.

1. Crea uno script chiamato argomenti :

vim arguments.sh

2. Aggiungi il seguente codice nello script:

arguments () {
        echo The function location is $0
        echo There are $# arguments
        echo "Argument 1 is $1"
        echo "Argument 2 is $2"
        echo "<[email protected]>" and "<$*>" are the same.
        echo List the elements in a for loop to see the difference!
        echo "* gives:"
        for arg in "$*"; do echo "<$arg>"; done
        echo "@ gives:"
        for arg in "[email protected]"; do echo "<$arg>"; done
}

arguments hello world

3. Salva lo script ed esci da Vim:

:wq

4. Rendi eseguibile lo script:

chmod +x arguments.sh

5. Esegui lo script:

./arguments.sh

L'output mostra messaggi descrittivi per ogni argomento utilizzato.

Ritorno della funzione Bash

Le funzioni Bash differiscono dalla maggior parte dei linguaggi di programmazione quando si tratta di restituire un valore da una funzione. Per impostazione predefinita, bash restituisce lo stato di uscita dell'ultimo comando eseguito nel corpo della funzione.

Lo script seguente mostra come specificare lo stato di uscita utilizzando return:

1. Crea uno script e chiamalo test.sh :

vim test.sh

2. Aggiungi la seguente funzione al file:

test_function() {
        echo Test
        return 100
}
echo The function\'s output is: 
test_function
echo The exit status is:
echo $?

3. Salva e chiudi l'editor di testo:

:wq

4. Modifica le autorizzazioni:

chmod +x test.sh

5. Eseguire lo script per vedere l'output della funzione e lo stato di uscita:

./test.sh

Un metodo alternativo è fare eco al risultato della funzione e assegnare l'output a una variabile. Modifica il test.sh script con il seguente codice:

test_function() {
        echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use

Questo metodo imita il funzionamento della maggior parte dei linguaggi di programmazione quando si utilizzano le funzioni.


Linux
  1. Come usare i comandi della cronologia di Bash

  2. Come utilizzare l'istruzione if else condizionali nello script Bash

  3. Come utilizzare gli input negli script della shell

  4. Come creare e chiamare funzioni in Bash

  5. come usare kill SIGUSR2 in bash?

Come utilizzare gli operatori di test di file Bash in Linux

Come utilizzare il comando Date negli script Bash in Linux

Come utilizzare il comando Declare in Linux Bash Shell

Come utilizzare il comando echo negli script Bash in Linux

Come usare execl (esempio incluso)

Come utilizzare Linux Bash Shell in Windows 10?