Com escriure i utilitzar biblioteques i funcions de Shell personalitzades


A Linux, els scripts d'intèrpret d'ordres ens ajuden de moltes maneres diferents, com ara la realització o fins i tot l'automatització de determinades tasques d'administració del sistema, la creació d'eines de línia d'ordres senzilles i moltes més.

En aquesta guia, mostrarem als nous usuaris de Linux on emmagatzemar de manera fiable scripts d'intèrpret d'ordres personalitzats, explicarem com escriure funcions i biblioteques d'intèrpret d'ordres personalitzats, utilitzar funcions de biblioteques en altres scripts.

On emmagatzemar els scripts de Shell

Per executar els vostres scripts sense escriure un camí complet/absolut, s'han d'emmagatzemar en un dels directoris de la variable d'entorn PATH.

Per comprovar el vostre PATH, emet l'ordre següent:

$ echo $PATH

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

Normalment, si la paperera del directori existeix al directori inicial d'un usuari, s'inclou automàticament al seu PATH. Podeu emmagatzemar els vostres scripts de shell aquí.

Per tant, creeu el directori bin (que també pot emmagatzemar scripts Perl, Awk o Python o qualsevol altre programa):

$ mkdir ~/bin

A continuació, creeu un directori anomenat lib (abreviatura de biblioteques) on guardareu les vostres pròpies biblioteques. També podeu mantenir biblioteques per a altres idiomes com C, Python, etc. A sota, creeu un altre directori anomenat sh; això emmagatzemarà especialment les biblioteques d'intèrpret d'ordres:

$ mkdir -p ~/lib/sh 

Creeu les vostres pròpies funcions i biblioteques de Shell

Una funció de shell és un grup d'ordres que realitzen una tasca especial en un script. Funcionen de manera similar als procediments, subrutines i funcions en altres llenguatges de programació.

La sintaxi per escriure una funció és:

function_name() { list of commands }

Per exemple, podeu escriure una funció en un script per mostrar la data de la manera següent:

showDATE() {date;}

Cada vegada que vulgueu mostrar la data, simplement invoqueu la funció anterior utilitzant el seu nom:

$ showDATE

Una biblioteca d'intèrpret d'ordres és simplement un script d'intèrpret d'ordres, però, podeu escriure una biblioteca per emmagatzemar només les vostres funcions que després podeu cridar des d'altres scripts d'intèrpret d'ordres.

A continuació es mostra un exemple d'una biblioteca anomenada libMYFUNCS.sh al meu directori ~/lib/sh amb més exemples de funcions:

#!/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
}

Deseu el fitxer i feu que l'script sigui executable.

Com invocar funcions des d'una biblioteca

Per utilitzar una funció en una lib, primer heu d'incloure la lib a l'script de l'intèrpret d'ordres on s'utilitzarà la funció, en el formulari següent:

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

Per tant, utilitzareu la funció printUSERDETS de la lib ~/lib/sh/libMYFUNCS.sh en un altre script com es mostra a continuació.

No heu d'escriure un altre codi en aquest script per imprimir les dades d'un usuari concret, només cal que truqueu a una funció existent.

Obriu un fitxer nou amb el nom test.sh:

#!/bin/bash 

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

#use function from lib
printUSERDETS

#exit script
exit 0

Deseu-lo, feu que l'script sigui executable i executeu-lo:

$ chmod 755 test.sh
$ ./test.sh 

En aquest article, us vam mostrar on emmagatzemar de manera fiable els scripts d'intèrpret d'ordres, com escriure les vostres pròpies funcions i biblioteques d'intèrpret d'ordres, invocar funcions de biblioteques en scripts d'intèrpret d'ordres normals.

A continuació, explicarem una manera senzilla de configurar Vim com a IDE per a scripts Bash. Fins aleshores, manteniu-vos sempre connectat amb TecMint i també compartiu els vostres pensaments sobre aquesta guia mitjançant el formulari de comentaris que trobareu a continuació.