GNU/Linux >> Linux Esercitazione >  >> Linux

Funzioni Bash

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

In questo tutorial, tratteremo le basi delle funzioni Bash e ti mostreremo come usarle negli script della tua 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
    }

    Versione a riga singola:

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

    function function_name {
      commands
    }

    Versione a riga singola:

    function function_name { commands; }

Pochi 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 nuove righe.
  • La definizione di una funzione non la esegue. Per invocare una funzione bash, usa semplicemente il nome della funzione. I comandi tra parentesi graffe vengono eseguiti ogni volta che la funzione viene chiamata nello script della shell.
  • La definizione della funzione deve essere inserita prima di qualsiasi chiamata alla funzione.
  • Quando si utilizzano funzioni "compatte" a riga singola, un punto e virgola ; deve seguire l'ultimo comando nella funzione.
  • Cerca sempre di mantenere i nomi delle tue funzioni descrittivi.

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 3, definiamo la funzione assegnandole un nome. La parentesi graffa { segna l'inizio del corpo della funzione.
  • Riga 4 è il corpo della funzione. Il corpo della funzione può contenere più comandi, istruzioni e dichiarazioni di variabili.
  • Riga 5 , la parentesi graffa di chiusura } , definisce la fine del hello_world funzione.
  • Nella riga 7 stiamo eseguendo la funzione. Puoi eseguire la funzione tutte le volte che vuoi.

Se esegui lo script, stamperà hello, world .

Ambito 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 local parola chiave e può essere utilizzato solo all'interno di quella funzione. Puoi 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
#!/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 . Poi c'è una funzione che imposta una variabile locale var1 e modifica la variabile globale var2 .

Se esegui lo script, dovresti vedere il seguente output:

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:

  • Quando una variabile locale è impostata 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 dall'interno della funzione.

Valori di ritorno #

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 restituito è lo stato dell'ultima istruzione eseguita nella funzione, 0 per il successo e numero decimale diverso da zero nell'intervallo 1 - 255 per il fallimento.

Lo stato del reso può essere specificato utilizzando il return parola chiave, ed è assegnato alla variabile $? . Il return istruzione termina la funzione. Puoi pensarlo come lo stato di uscita della funzione.

~/return_values.sh
#!/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 è inviare il valore a stdout usando echoor printf come mostrato di seguito:

~/return_values.sh
#!/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 a func_result variabile usando il $() sostituzione del comando. La variabile può essere utilizzata in seguito secondo necessità.

Passaggio di argomenti a funzioni Bash #

Per passare un numero qualsiasi di argomenti alla funzione bash è sufficiente inserirli subito dopo il nome della funzione, separati da uno spazio. È buona norma citare gli argomenti tra virgolette per evitare di spargere in modo errato un argomento contenente degli spazi.

  • I parametri passati sono $1 , $2 , $3$n , corrispondente alla posizione del parametro dopo il nome della funzione.
  • Il $0 variabile è riservata al nome della funzione.
  • Il $# variabile contiene il numero di parametri/argomenti posizionali passati alla funzione.
  • Il $* e $@ le variabili contengono tutti i parametri/argomenti posizionali passati alla funzione.
    • In caso di doppia virgoletta, "$*" si espande in una singola stringa separata da uno spazio (il primo carattere di IFS) - "$1 $2 $n" .
    • In caso di doppia virgoletta, "$@" si espande in stringhe separate - "$1" "$2" "$n" .
    • Se non doppia, $* e $@ sono gli stessi.

Ecco un esempio:

~/passing_arguments.sh
#!/bin/bash

greeting () {
  echo "Hello $1"
}

greeting "Joe"
Hello 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.

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

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. In Bash, quando alias, quando script e quando scrivere una funzione?

  2. Ottieni un elenco di nomi di funzioni in uno script di shell

  3. esecuzione di script php (funzione php) in linux bash

  4. Invia l'output alla funzione bash

  5. Come posso annullare l'impostazione o eliminare una funzione bash?

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

Bash Shebang

Shell Scripting Parte V:Funzioni in Bash

Bash Scripting:funzioni spiegate con esempi

Bash Scripting Part6 – Crea e usa le funzioni Bash

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici