GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Scripting Part6 – Crea e usa le funzioni Bash

Prima di parlare delle funzioni bash, discutiamo di questa situazione. Quando scrivi script bash, ti ritroverai a utilizzare lo stesso codice in più punti.

Se ti stanchi di scrivere le stesse righe di codice ancora e ancora nel tuo script bash, sarebbe bello scrivere il blocco di codice una volta e chiamarlo ovunque nel tuo script bash.

La shell bash ti consente di fare proprio questo con le Funzioni .

Funzioni Bash sono blocchi di codice che puoi riutilizzare ovunque nel tuo codice. Ogni volta che si desidera utilizzare questo blocco di codice nello script, è sufficiente digitare il nome della funzione assegnatagli.

Parleremo di come creare le tue funzioni bash e di come usarle negli script di shell.

Creazione di una funzione

Puoi definire una funzione come questa:

nomefunzione() {}

Le parentesi () sono necessarie per definire la funzione.

Inoltre, puoi definire la funzione utilizzando la parola chiave function, ma questa parola chiave è obsoleta per la portabilità POSIX.

function functionName() { # Definizione obsoleta ma ancora utilizzata e funzionante}

Nella seconda definizione, le parentesi non sono obbligatorie.

Utilizzo delle funzioni

#!/bin/bashmyfunc() { echo "Uso delle funzioni"}total=1while [ $total -le 3 ]; do myfunc total=$(($total + 1))doneecho "Loop terminato"myfunccho "Fine dello script"

Qui abbiamo creato una funzione chiamata myfunc e per chiamarla abbiamo semplicemente digitato il suo nome.

Puoi chiamare la funzione quante volte vuoi.

Avviso:se provi a utilizzare una funzione che non è definita, cosa accadrà?

#!/bin/bashtotal=1mentre [ $totale -le 3 ]; do myfunc total=$(($total + 1))doneecho "Loop End"myfunc() { echo "Uso della funzione ..."}echo "Fine dello script"

Oh, è un errore perché non esiste tale funzione.

Un altro avviso:il nome della funzione bash deve essere univoco. In caso contrario, la nuova funzione cancellerà la vecchia funzione senza errori.

#!/bin/bashmyfunc() { echo "La prima definizione di funzione"}myfuncfunction myfunc() { echo "La seconda definizione di funzione"}myfuncecho "Fine dello script"

Come puoi vedere, la seconda definizione di funzione prende il controllo dalla prima senza alcun errore, quindi fai attenzione quando definisci le funzioni.

Utilizzo del comando di ritorno

Il comando return restituisce un numero intero dalla funzione.

Ci sono due modi per usare il comando di ritorno; il primo modo è questo:

#!/bin/bashmyfunc() { read -p "Inserisci un valore:" value echo "aggiunte valore" return $(($value + 10))}myfuncecho "Il nuovo valore è $?"

La funzione myfunc aggiunge 10 alla variabile $value, quindi mostra la somma utilizzando $? Variabile.

Non eseguire alcun comando prima di ottenere il valore della funzione, perché la variabile $? restituisce lo stato dell'ultima riga.

Questo metodo di ritorno restituisce numeri interi. Che ne dici di restituire le stringhe?

Utilizzo dell'uscita funzione

Il secondo modo per restituire un valore da una funzione bash è la sostituzione del comando. In questo modo, puoi restituire qualsiasi cosa dalla funzione.

#!/bin/bashmyfunc() { read -p "Inserisci un valore:" value echo $(($value + 10))}result=$(myfunc)echo "Il valore è $result"

Parametri passati

Possiamo gestire funzioni bash come piccoli frammenti che possiamo riutilizzare, e va bene, ma dobbiamo rendere la funzione come un motore, gli diamo qualcosa e restituisce un risultato basato su ciò che forniamo.

È possibile utilizzare le variabili di ambiente per elaborare i parametri passati alla funzione. Il nome della funzione viene dichiarato come variabile $0 e i parametri passati sono $1, $2, $3 e così via

Puoi ottenere il numero di parametri passati alla funzione utilizzando ($# ) variabile.

Passiamo parametri come questo:

miafunzione $val1 10 20

L'esempio seguente mostra come utilizzare la variabile ($#):

#!/bin/bashaddnum() { if [ $# -gt 2 ]; then echo "Passati parametri errati" # Se i parametri non sono uguali a 2 else echo $(($1 + $2)) # Altrimenti aggiungili fi}echo -n "Aggiunta 10 e 15:"value=$(addnum 10 15)echo $valueecho -n "Sommare tre numeri:"value=$(addnum 10 15 20)echo $value

La funzione addnum ottiene il conteggio dei parametri passati. Se è passato maggiore di 2, restituisce -1.

Se è presente un parametro, la funzione addnum aggiunge questo parametro due volte. Se vengono passati due parametri, la funzione addnum li somma e se provi ad aggiungere tre parametri, restituirà -1.

Se provi a utilizzare i parametri passati all'interno della funzione, fallisce:

#!/bin/bashmyfunc() { echo $(($1 + $2 + $3 + $4))}if [ $# -eq 4 ]; then value=$(myfunc) echo "Total=$value"else echo "Parametri passati come questo:myfunc a b c d"fi

Invece, devi inviarli alla funzione in questo modo:

#!/bin/bashmyfunc() { echo $(($1 + $2 + $3 + $4))}if [ $# -eq 4 ]; then value=$(myfunc $1 $2 $3 $4) echo "Total=$value"else echo "Parametri passati come questo:myfunc a b c d"fi

Adesso funziona!!

Elaborazione di variabili nelle funzioni Bash

Ogni variabile che utilizziamo ha un ambito; l'ambito è la visibilità variabile del tuo script.

Puoi definire due tipi di variabili:

  • Globale
  • Locale

Variabili globali

Sono visibili e validi ovunque nello script bash. Puoi persino ottenere il suo valore dall'interno della funzione.

Se dichiari una variabile globale all'interno di una funzione, puoi ottenere il suo valore dall'esterno della funzione.

Qualsiasi variabile dichiarata è una variabile globale per impostazione predefinita. Se definisci una variabile al di fuori della funzione, la chiami all'interno della funzione senza problemi:

#!/bin/bashmyfunc() { input=$(($input + 10))}read -p "Inserisci un numero:" inputmyfunccho "Il nuovo valore è:$input"

Se modifichi il valore della variabile all'interno della funzione, il valore verrà modificato all'esterno della funzione.

Allora come superare una cosa del genere? Usa variabili locali.

Variabili locali

Se utilizzi la variabile solo all'interno della funzione, puoi dichiararla come variabile locale utilizzando la parola chiave locale  in questo modo:

local tmp=$(( $val + 10 ))

Quindi, se hai due variabili, una all'interno della funzione e l'altra all'esterno della funzione, e hanno lo stesso nome, non si influenzeranno a vicenda.

#!/bin/bashmyfunc() { local tmp=$(($val + 10)) echo "La funzione Temp from inside is $tmp"}tmp=4myfuncecho "La temp from outside is $tmp"

Quando usi la variabile $tmp all'interno della funzione myfunc, non cambia il valore di $tmp, che è al di fuori della funzione.

Passaggio di array come parametri

Cosa accadrà se si passa un array come parametro a una funzione:

#!/bin/bashmyfunc() { echo "I parametri sono:[email protected]" arr=$1 echo "L'array ricevuto è ${arr[*]}"}my_arr=(5 10 15)echo "Il vecchio array è:${my_arr[*]}"myfunc ${my_arr[*]}

La funzione accetta solo il primo valore della variabile array.

È necessario disassemblare l'array nei suoi singoli valori, quindi utilizzare questi valori come parametri di funzione. Infine, impacchettali in un array nella funzione come questa:

#!/bin/bashmyfunc() { local new_arr new_arr=("[email protected]") echo "Il valore aggiornato è:${new_arr[*]}"}my_arr=(4 5 6)echo "Old l'array è ${my_arr[*]}"myfunc ${my_arr[*]}

La variabile array è stata ricostruita grazie alla funzione.

Funzione ricorsiva

Questa funzione consente alla funzione di richiamarsi dall'interno della funzione stessa.

Il classico esempio di funzione ricorsiva è il calcolo dei fattoriali. Per calcolare il fattoriale di 3, usa la seguente equazione:

3! =1 * 2 * 3

Invece, possiamo usare la funzione ricorsiva in questo modo:

x! =x * (x-1)!

Quindi, per scrivere la funzione fattoriale usando lo scripting bash, sarà così:

#!/bin/bashfac_func() { se [$1 -eq 1]; then echo 1 else local tmp=$(($1 - 1)) local res=$(fac_func $tmp) echo $(($res * $1)) fi}read -p "Inserisci valore:" valres=$(fac_func $ val)echo "Il fattoriale di $val è:$res"

Usare le funzioni bash ricorsive è così facile!

Creazione di librerie

Ora sappiamo come scrivere funzioni e come chiamarle, ma cosa succede se si desidera utilizzare queste funzioni bash o blocchi di codice su diversi file di script bash senza copiarlo e incollarlo sui tuoi file.

Puoi creare una libreria per le tue funzioni e puntare a quella libreria da qualsiasi file di cui hai bisogno.

Utilizzando il comando sorgente , puoi incorporare lo script del file di libreria all'interno dello script della shell.

Il comando sorgente ha un alias, che è il punto. Per generare un file in uno script di shell, scrivi la seguente riga:

. ./mioscript

Supponiamo di avere un file chiamato myfuncs che contiene quanto segue:

addnum() { echo $(($1 + $2 + $3 + $4))}

Ora lo useremo in un altro file di script bash come questo:

#!/bin/bash. ./myfuncsresult=$(addnum 10 10 5 5)echo "Totale =$risultato"

Stupendo!! Abbiamo usato le funzioni bash all'interno del nostro file di script bash; possiamo anche usarli direttamente nella nostra shell.

Usa le funzioni Bash dalla riga di comando

Bene, è facile, se leggi il post precedente, che riguardava i segnali e i lavori, avrai un'idea su come ottenere il nostro file delle funzioni nel file bashrc, e quindi possiamo usare le funzioni direttamente dalla shell bash . Fantastico

Modifica il file bashrc in /home/username e aggiungi questa riga:

. /home/likegeeks/Desktop/myfuncs

Assicurati di digitare il percorso corretto.

Ora la funzione è disponibile per noi da utilizzare direttamente nella riga di comando:

$ addnum 10 20

Nota:potrebbe essere necessario disconnettersi e accedere per utilizzare le funzioni bash dalla shell.

Un'altra nota:se imposti il ​​nome della tua funzione come uno qualsiasi dei comandi integrati, sovrascriverai il comando predefinito, quindi dovresti occupartene.

Spero che il post ti piaccia. Continua a tornare.

Grazie.


Linux
  1. Come definire e utilizzare le funzioni in Linux Shell Script

  2. Come creare un alias e utilizzare il comando alias in Linux

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

  4. È possibile creare e utilizzare menu in Vim (basato su terminale)?

  5. Come creare e chiamare funzioni in Bash

Funzioni Bash

Shell Scripting Parte V:Funzioni in Bash

Bash Scripting:funzioni spiegate con esempi

Come utilizzare il comando Date negli script Bash in Linux

Crea e usa alias Bash in Linux

Come creare e utilizzare file di scambio su Linux