Ricerca nel sito web

Come scrivere e utilizzare funzioni e librerie di shell personalizzate


In Linux, gli script di shell ci aiutano in tanti modi diversi, tra cui l'esecuzione o addirittura l'automazione di determinate attività di amministrazione del sistema, la creazione di semplici strumenti da riga di comando e molto altro.

In questa guida mostreremo ai nuovi utenti Linux dove archiviare in modo affidabile script di shell personalizzati, spiegheremo come scrivere funzioni e librerie di shell personalizzate, utilizzare funzioni da librerie in altri script.

Dove archiviare gli script di shell

Per eseguire gli script senza digitare un percorso completo/assoluto, è necessario memorizzarli in una delle directory nella variabile di ambiente ` PATH.

Per controllare il tuo ` PERCORSO, immetti il comando seguente:

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Normalmente, se la directory bin esiste nella home directory di un utente, viene automaticamente inclusa nel suo ` PATH. Puoi memorizzare i tuoi script di shell qui.

Creare quindi la directory bin (che può contenere anche script Perl, Awk o Python o qualsiasi altro programma):

mkdir ~/bin

Successivamente, crea una directory chiamata lib (abbreviazione di librerie) dove manterrai le tue librerie. Puoi anche conservare librerie per altri linguaggi come C, Python e così via. Sotto di essa, crea un'altra directory chiamata sh; questo memorizzerà in particolare le librerie di shell:

mkdir -p ~/lib/sh 

Crea le tue funzioni e librerie della shell

Una funzione shell è un gruppo di comandi che eseguono un'attività speciale in uno script. Funzionano in modo simile a procedure, subroutine e funzioni in altri linguaggi di programmazione.

La sintassi per scrivere una funzione è:

function_name() { list of commands }

Ad esempio, puoi scrivere una funzione in uno script per mostrare la data come segue:

showDATE() {date;}

Ogni volta che vuoi visualizzare la data, richiama semplicemente la funzione sopra usando il suo nome:

showDATE

Una libreria di shell è semplicemente uno script di shell, tuttavia puoi scrivere una libreria per memorizzare solo le funzioni che potrai successivamente richiamare da altri script di shell.

Di seguito è riportato un esempio di una libreria chiamata libMYFUNCS.sh nella mia directory ~/lib/sh con altri esempi di funzioni:

#!/bin/bash 

#Function to clearly list directories in PATH 
showPATH() { 
        oldifs="$IFS"   #store old internal field separator
        IFS=:              #specify a new internal field separator
        for DIR in $PATH ;  do echo $DIR ;  done
        IFS="$oldifs"    #restore old internal field separator
}

#Function to show logged user
showUSERS() {
        echo -e “Below are the user logged on the system:\n”
        w
}

#Print a user’s details 
printUSERDETS() {
        oldifs="$IFS"    #store old internal field separator
        IFS=:                 #specify a new internal field separator
        read -p "Enter user name to be searched:" uname   #read username
        echo ""
       #read and store from a here string values into variables using : as  a  field delimiter
    read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep   "^$uname")"
       #print out captured values
        echo  -e "Username is            : $username\n"
        echo  -e "User's ID                 : $uid\n"
        echo  -e "User's GID              : $gid\n"
        echo  -e "User's Comments    : $comments\n"
        echo  -e "User's Home Dir     : $homedir\n"
        echo  -e "User's Shell             : $shell\n"
        IFS="$oldifs"         #store old internal field separator
}

Salvare il file e rendere eseguibile lo script.

Come richiamare funzioni da una libreria

Per utilizzare una funzione in una lib, è necessario prima di tutto includere la lib nello script di shell in cui verrà utilizzata la funzione, nella forma seguente:

./path/to/lib
OR
source /path/to/lib

Quindi dovresti utilizzare la funzione printUSERDETS dalla libreria ~/lib/sh/libMYFUNCS.sh in un altro script come mostrato di seguito.

Non è necessario scrivere un altro codice in questo script per stampare i dettagli di un particolare utente, è sufficiente chiamare una funzione esistente.

Apri un nuovo file con il nome test.sh:

#!/bin/bash 

#include lib
.  ~/lib/sh/libMYFUNCS.sh

#use function from lib
printUSERDETS

#exit script
exit 0

Salvalo, quindi rendi eseguibile lo script ed eseguilo:

chmod 755 test.sh
./test.sh 

In questo articolo, ti abbiamo mostrato dove archiviare in modo affidabile gli script di shell, come scrivere le tue funzioni e librerie di shell, richiamare funzioni dalle librerie nei normali script di shell.

Successivamente, spiegheremo un modo semplice per configurare Vim come un IDE per lo scripting Bash. Fino ad allora, rimani sempre connesso a TecMint e condividi anche le tue opinioni su questa guida tramite il modulo di feedback qui sotto.