Cómo escribir y usar funciones y bibliotecas de shell personalizadas


En Linux, los scripts de shell nos ayudan de muchas maneras diferentes, incluida la realización o incluso la automatización de ciertas tareas de administración del sistema, la creación de herramientas simples de línea de comandos y muchas más.

En esta guía, mostraremos a los nuevos usuarios de Linux dónde almacenar de manera confiable scripts de shell personalizados, explicaremos cómo escribir funciones y bibliotecas de shell personalizados, y cómo utilizar funciones de bibliotecas en otros scripts.

Dónde almacenar los scripts de Shell

Para ejecutar sus scripts sin escribir una ruta completa/absoluta, deben almacenarse en uno de los directorios de la variable de entorno $PATH.

Para verificar su $PATH, emita el siguiente comando:

$ echo $PATH

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

Normalmente, si el directorio bin existe en el directorio de inicio de un usuario, se incluye automáticamente en su $PATH. Puede almacenar sus scripts de shell aquí.

Por lo tanto, cree el directorio bin (que también puede almacenar scripts de Perl, Awk o Python o cualquier otro programa):

$ mkdir ~/bin

A continuación, cree un directorio llamado lib (abreviatura de bibliotecas) donde guardará sus propias bibliotecas. También puede mantener bibliotecas para otros lenguajes como C, Python, etc. Debajo, cree otro directorio llamado sh; esto almacenará particularmente sus bibliotecas de shell:

$ mkdir -p ~/lib/sh 

Cree sus propias funciones y bibliotecas de shell

Una función de shell es un grupo de comandos que realizan una tarea especial en un script. Funcionan de manera similar a los procedimientos, subrutinas y funciones en otros lenguajes de programación.

La sintaxis para escribir una función es:

function_name() { list of commands }

Por ejemplo, puede escribir una función en un script para mostrar la fecha de la siguiente manera:

showDATE() {date;}

Cada vez que desee mostrar la fecha, simplemente invoque la función anterior usando su nombre:

$ showDATE

Una biblioteca de shell es simplemente un script de shell, sin embargo, puede escribir una biblioteca para almacenar solo sus funciones que luego puede llamar desde otros scripts de shell.

A continuación se muestra un ejemplo de una biblioteca llamada libMYFUNCS.sh en mi directorio ~/lib/sh con más ejemplos de funciones:

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

Guarde el archivo y haga que el script sea ejecutable.

Cómo invocar funciones desde una biblioteca

Para usar una función en una biblioteca, primero debe incluir la biblioteca en el script de shell donde se usará la función, en el siguiente formulario:

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

Por lo tanto, usaría la función printUSERDETS de lib ~/lib/sh/libMYFUNCS.sh en otro script como se muestra a continuación.

No es necesario que escriba otro código en este script para imprimir los detalles de un usuario en particular, simplemente llame a una función existente.

Abra un nuevo archivo con el nombre test.sh:

#!/bin/bash 

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

#use function from lib
printUSERDETS

#exit script
exit 0

Guárdelo, luego haga que el script sea ejecutable y ejecútelo:

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

En este artículo, le mostramos dónde almacenar de manera confiable scripts de shell, cómo escribir sus propias funciones y bibliotecas de shell, cómo invocar funciones de bibliotecas en scripts de shell normales.

A continuación, explicaremos una forma sencilla de configurar Vim como un IDE para scripting Bash. Hasta entonces, manténgase siempre conectado a TecMint y también comparta sus pensamientos sobre esta guía a través del formulario de comentarios a continuación.