Bash Scripting – Funzioni
Uno script Bash è un file di testo semplice. Questo file contiene diversi comandi per l'esecuzione passo passo. Questi comandi possono essere scritti direttamente nella riga di comando ma dal punto di vista della riusabilità è utile archiviare tutti i comandi correlati per un'attività specifica in un unico file. Possiamo utilizzare quel file per eseguire la serie di comandi una o più volte secondo le nostre esigenze.
Qui in questo articolo discuteremo dell'uso delle funzioni all'interno di Bash Scripting.
Nella programmazione, una funzione è un blocco di codice che esegue alcune attività e può essere chiamato più volte per eseguire attività. Fornisce modularità al programma e riduce la lunghezza del codice. L'esempio più semplice dell'uso della funzione nello scripting Bash può essere fornito come:
Script di esempio:
#!/bin/bash #It is a function myFunction () { echo Hello World from techcodeview.com } #function call myFunction Produzione:
Hello World from techcodeview.com
L'esempio sopra mostra una funzione che stampa qualcosa quando viene chiamata. Quindi, la sintassi di base per scrivere funzioni all'interno di uno script Bash sarà
Sintassi:
# for defining function_name(){ commands ..... } function_name # for calling Oltre a questo, possiamo anche avere funzioni con argomenti passanti e con valori restituiti. Ora discutiamone.
Funzioni con argomenti passanti
Possiamo aggiungere argomenti o parametri a una funzione e passare i dati utilizzandoli alla funzione in modo che la funzione possa agire con tali dati. Nello scripting bash, possiamo usare la seguente sintassi per scrivere una funzione con argomenti passanti.
Sintassi delle funzioni con argomenti passanti:
#for defining function_name(){ ..... parameter_1 = $1 parameter_2 = $2 . . . parameter_n = $n .... commands ..... } #for calling function_name p1 p2 ....pn Possiamo passare direttamente gli argomenti mentre chiamiamo la funzione e possiamo accedervi con $1, $2…..$n all'interno della funzione. Vediamo un esempio per comprenderlo più chiaramente.
Esempio di funzioni con argomenti passanti:
#!/bin/bash add_two_num(){ local sum=$(($1+$2)) echo sum of $1 and $2 is $sum } add_two_num 2 3 Output di funzioni con argomenti passanti:
sum of 2 and 3 is 5
Sopra c'è uno script per aggiungere due numeri. Qui abbiamo fornito 2 e 3 come argomenti. Abbiamo effettuato l'accesso utilizzando $ 1 e $ 2 dalla funzione, abbiamo calcolato la loro somma e l'abbiamo stampata sul terminale. Di seguito è riportata la rappresentazione della shell del terminale dopo l'esecuzione dello script:
Funzioni con valori restituiti
Un valore restituito viene prodotto e restituito al metodo chiamante da una funzione dopo aver completato la sua esecuzione. Un valore restituito può essere utilizzato per condividere il risultato prodotto o un codice di stato relativo all'esecuzione corretta o meno di una funzione. Negli script Bash, il valore restituito è assegnato a $? variabile.
Un esempio dello stesso è riportato di seguito:
Esempio di funzioni con valori di ritorno:
#!/bin/bash myfun(){ return 7 } myfun echo The return value is $? Output di funzioni con valori di ritorno:
The return value is 7
Di seguito è riportato l'output della shell del terminale dopo l'esecuzione dello script:
Ora modifichiamo la somma precedente dello script a due numeri.
Codice modificato:
#!/bin/bash myfun(){ return $(($1+$2)) } add_two_num 2 3 echo The sum is $? Output del codice modificato:
The sum is 5
Ora il codice sopra è un esempio dell'utilizzo di entrambi i parametri e del valore restituito in una funzione di script Bash.
Di seguito è riportata la rappresentazione della shell del terminale dopo l'esecuzione dello script:
Ambito variabile
L'ambito in un programma o script è un'area in cui le variabili esistono. Se una variabile viene dichiarata all'interno di una funzione, generalmente è una variabile locale mentre se viene dichiarata all'esterno, allora è una variabile globale. Nel caso di uno script bash, questo concetto è leggermente diverso, qui qualsiasi variabile sia scritta all'interno di una funzione o all'esterno di una funzione per impostazione predefinita è una variabile globale. Se vogliamo creare una variabile locale allora dobbiamo usare la parola chiave local.
È consigliabile utilizzare sempre una variabile locale all'interno di una funzione per evitare inutili confusioni.
Un esempio dello stesso è riportato di seguito:
Esempio di ambito variabile:
#!/bin/bash var1='Apple' #global variable myfun(){ local var2='Banana' #local variable var3='Cherry' #global variable echo 'The name of first fruit is $var1' echo 'The name of second fruit is $var2' } myfun #calling function echo 'The name of first fruit is $var1' #trying to access local variable echo 'The name of second fruit is $var2' echo 'The name of third fruit is $var3' Output dell'ambito variabile:
The name of first fruit is Apple The name of second fruit is Banana The name of first fruit is Apple The name of second fruit is The name of third fruit is Cherry
Nell'esempio sopra, var2 è una variabile locale, quindi quando vi accediamo dalla funzione funziona bene, ma quando proviamo ad accedervi dall'esterno della funzione, ci fornisce un risultato vuoto nell'output.
D'altra parte, a differenza dei linguaggi di programmazione, anche se var3 è definita all'interno di una funzione, agisce comunque come una variabile globale ed è possibile accedervi all'esterno della funzione. Di seguito è riportata la rappresentazione della shell del terminale dopo l'esecuzione dello script:
Comandi prioritari
È possibile avere una funzione con lo stesso nome di un comando. È utile se vogliamo eseguire un comando con opzioni specifiche o se vogliamo averne una versione personalizzata.
Un esempio dello stesso è riportato di seguito:
Esempio di comandi prioritari:
#!/bin/bash #overriding command echo(){ builtin echo 'The name is : $1' } echo 'Satyajit Ghosh' Output dei comandi prioritari:
The name is : Satyajit Ghosh
Qui in questo esempio, abbiamo sovrascritto il file eco comando. Ora, prima di stampare la stringa data, aggiunge alla stringa alcune parole in più e poi stampa. Di seguito è riportata la rappresentazione della shell del terminale dopo l'esecuzione dello script: