GNU/Linux >> Linux Esercitazione >  >> Linux

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici

Le funzioni della shell Bash sono un modo per raggruppare diversi comandi UNIX/Linux per l'esecuzione successiva utilizzando un unico nome per il gruppo . La funzione della shell Bash può essere eseguita proprio come un normale comando Unix. Le funzioni della shell vengono eseguite nel contesto della shell corrente senza creare alcun nuovo processo per interpretarle.

Sia gli alias bash che le funzioni consentono di definire scorciatoie per comandi più lunghi o più complicati. Tuttavia, gli alias non consentono flussi di controllo, argomenti e altri trucchi che queste funzioni consentiranno, come spiegato in questo tutorial.

Questo articolo fa parte della serie di tutorial bash in corso. Fare riferimento al nostro precedente tutorial sull'introduzione di bash, lo stato di bash esiste e gli esempi di alias bash.

Sintassi per creare una funzione bash:

function functionname()
{
commands
.
.
}
  • funzione è una parola chiave facoltativa.
  • nome funzione è il nome della funzione
  • comandi – Elenco dei comandi da eseguire nelle funzioni.

La funzione accetta argomenti. Durante l'esecuzione, gli argomenti della funzione diventano i parametri posizionali. Il parametro posizionale 0 avrà lo scriptname che rimane invariato.

Puoi chiamare la funzione bash dalla riga di comando come mostrato di seguito:

$ functionname arg1 arg2
  • Quando la shell interpreta un comando Linux, prima esamina le speciali funzioni integrate come break, continue, eval, exec ecc., quindi cerca le funzioni della shell.
  • Lo stato di uscita della funzione bash è lo stato di uscita dell'ultimo comando eseguito nel corpo della funzione.

Nota: Posizionare le definizioni delle funzioni della shell in un file di avvio della shell (ad esempio, .bash_profile ). In questo modo, la funzione shell è sempre disponibile per te dalla riga di comando. Fare riferimento al nostro precedente articolo sulla sequenza di esecuzione di bash per identificare quando verrà eseguito .bash_profile.

Esempio 1:funzione per visualizzare un lungo elenco di file con l'estensione specificata

La funzione "lsext" viene utilizzata per trovare l'elenco dei file nella directory corrente, che ha l'estensione indicata come mostrato di seguito. Questa funzione usa la combinazione di comando find e comando ls per portare a termine il lavoro.

$ function lsext()
{
find . -type f -iname '*.'${1}'' -exec ls -l {} \; ;
}

$ cd ~

$ lsext txt
-rw-r--r-- 1 root root   24 Dec 15 14:00 InMorning.txt
-rw-r--r-- 1 root root  184 Dec 16 11:45 Changes16.txt
-rw-r--r-- 1 root root  458 Dec 18 11:04 Changes18.txt
-rw-r--r-- 1 root root 1821 Feb  4 15:01 ChangesOfDB.txt

Esempio 2. Funzione Bash per eseguire un dato comando Linux su un gruppo di file

Nell'esempio seguente, la funzione “batchexec” trova i file con l'estensione data ed esegue il comando dato su quei file selezionati.

$ function batchexec()
{
find . -type f -iname '*.'${1}'' -exec ${@:2}  {} \; ;
}

$ cd ~

$ batchexec sh ls

$ batchexec sh chmod 755

$ ls -l *.sh
-rwxr-xr-x 1 root root  144 Mar  9 14:39 debug.sh
-rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh
-rwxr-xr-x 1 root root   22 Mar 18 08:32 t.sh

Nell'esempio sopra, trova tutti i file di script della shell con estensione .sh e cambia i suoi permessi in 755. (Tutti i permessi per l'utente, per il gruppo e altri permessi di lettura ed esecuzione). Nella definizione della funzione potresti notare "${@:2}" che fornisce il secondo e i seguenti parametri posizionali (funzione di espansione della shell).

Esempio 3. Funzione Bash per generare password casuali

La seguente funzione viene utilizzata per generare password complesse casuali con caratteri speciali per la lunghezza specificata. Se la lunghezza non è specificata per impostazione predefinita, viene generata con una lunghezza di 12 caratteri.

$ function rpass() {
        cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
}

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

Nell'esempio precedente, quando rpass viene eseguito con l'argomento 6, genera una password casuale con 6 caratteri e rpass senza argomento genera una password di 12 caratteri. ${1:-12} significa che se $1 non è impostato o null 12 verrà restituito, altrimenti verrà sostituito il valore di $1.

Esempio 4. Funzione Bash per ottenere l'indirizzo IP di una determinata interfaccia

L'esempio seguente definisce una funzione chiamata "getip" che accetta il nome dell'interfaccia come argomento e fornisce l'indirizzo IP assegnato sull'interfaccia data nella macchina. (per impostazione predefinita restituisce l'indirizzo ip eth0). Questo usa il comando ifconfig per ottenere l'indirizzo IP.

$ function getip()
{
/sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}';
}

$ getip
15.110.106.86

$ getip eth0
15.110.106.86

$ getip lo
127.0.0.1

Esempio 5. Funzione Bash per stampare i dettagli delle macchine

Questo esempio definisce la funzione che fornisce tutte le informazioni richieste sulla macchina. Gli utenti possono definire e chiamare questa funzione nei file di avvio, in modo da ottenere queste informazioni durante l'avvio.

$ function mach()
{
    echo -e "\nMachine information:" ; uname -a
    echo -e "\nUsers logged on:" ; w -h
    echo -e "\nCurrent date :" ; date
    echo -e "\nMachine status :" ; uptime
    echo -e "\nMemory status :" ; free
    echo -e "\nFilesystem status :"; df -h
}

$ mach
Machine information:
Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux

Users logged on:
root     pts/2    ptal.mot Wed10    0.00s  1.35s  0.01s w -h

Current date :
Thu Mar 18 11:59:36 CET 2010

Machine status :
 11:59:36 up 7 days, 3 min,  1 user,  load average: 0.01, 0.15, 0.15

Memory status :
             total       used       free     shared    buffers     cached
Mem:       2059768    2033212      26556          0      81912     797560
-/+ buffers/cache:    1153740     906028
Swap:      4192956      48164    4144792

Filesystem status :
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              12G   12G     0 100% /
tmpfs                1006M  377M  629M  38% /dev/shm
/dev/sdc5             9.9G  409M  9.0G   5% /mydisk

Esempio 6:funzione Bash per formattare meglio l'output

La seguente funzione cancellerà lo schermo, posizionerà il cursore nella parte superiore dello schermo, eseguirà ls e quindi posizionerà il cursore alla fine dello schermo.

$ function ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
}

$ ll

Visualizza il codice funzione usando il comando di tipo

type è una shell incorporata usata per visualizzare il codice della funzione.

Syntax:
type function-name
$ type ll
ll is a function
ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
    alias ls="ls --color=auto -F"
}

Per un facile riferimento, ottieni tutte le 6 funzioni menzionate in questo articolo da questo file di funzioni .bash_profile di esempio.

Aggiungi tutte queste funzioni al tuo file ~/.bash_profile, per assicurarti di avere sempre accesso a queste funzioni senza doverlo creare ogni volta.


Linux
  1. Funzioni nelle variabili Shell?

  2. Bash Istruzione If-Else con esempi

  3. Tutorial Awk:Comprendi le variabili Awk con 3 esempi pratici

  4. Esercitazione sullo stato di uscita di Bash Shell con esempi pratici

  5. 15 utili comandi integrati di Bash Shell (con esempi)

Bash Scripting:funzioni spiegate con esempi

Bash If Else Sintassi con esempi

Tutorial Unix Sed:operazione su file multilinea con 6 esempi pratici

Bash Scripting Introduzione Tutorial con 5 esempi pratici

Esercitazione sulle variabili Bash:6 esempi pratici di variabili globali e locali Bash

The Ultimate Tar Command Tutorial con 10 esempi pratici