GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial de funciones de Bash Shell con 6 ejemplos prácticos

Las funciones de shell Bash son una forma de agrupar varios comandos de UNIX/Linux para su posterior ejecución usando un solo nombre para el grupo . La función Bash Shell se puede ejecutar como un comando normal de Unix. Las funciones de shell se ejecutan en el contexto de shell actual sin crear ningún proceso nuevo para interpretarlas.

Tanto los alias como las funciones de bash le permiten definir accesos directos para comandos más largos o más complicados. Sin embargo, los alias no permiten flujos de control, argumentos y otros trucos que estas funciones permitirán, como se explica en este tutorial.

Este artículo es parte de la serie de tutoriales bash en curso. Consulte nuestro tutorial anterior sobre la introducción de bash, el estado de existencia de bash y los ejemplos de alias de bash.

Sintaxis para crear una función bash:

function functionname()
{
commands
.
.
}
  • función es una palabra clave que es opcional.
  • nombre de función es el nombre de la función
  • comandos – Lista de comandos a ejecutar en las funciones.

La función acepta argumentos. Durante la ejecución, los argumentos de la función se convierten en los parámetros posicionales. El parámetro posicional 0 tendrá el nombre del script que permanecerá sin cambios.

Puede llamar a la función bash desde la línea de comando como se muestra a continuación:

$ functionname arg1 arg2
  • Cuando el shell interpreta un comando de Linux, primero busca las funciones integradas especiales como romper, continuar, evaluar, ejecutar, etc., luego busca las funciones del shell.
  • El estado de salida de la función bash es el estado de salida del último comando ejecutado en el cuerpo de la función.

Nota: Coloque las definiciones de funciones de shell en un archivo de inicio de shell (por ejemplo, .bash_profile). De esta manera, la función de shell siempre está disponible para usted desde la línea de comandos. Consulte nuestro artículo anterior sobre la secuencia de ejecución de bash para identificar cuándo se ejecutará .bash_profile.

Ejemplo 1:Función para mostrar una larga lista de archivos con la extensión dada

La función "lsext" se usa para encontrar la lista de archivos en el directorio actual, que tiene la extensión dada como se muestra a continuación. Esta función utiliza la combinación del comando find y el comando ls para realizar el trabajo.

$ 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

Ejemplo 2. Función Bash para ejecutar un comando Linux dado en un grupo de archivos

En el siguiente ejemplo, la función "batchexec" encuentra los archivos con la extensión dada y ejecuta el comando dado en esos archivos seleccionados.

$ 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

En el ejemplo anterior, encuentra todos los archivos de script de shell con la extensión .sh y cambia su permiso a 755. (Todos los permisos para el usuario, para el grupo y otros permisos de lectura y ejecución). En la definición de la función, podría notar "${@:2}", que proporciona el segundo y los siguientes parámetros posicionales (característica de expansión de shell).

Ejemplo 3. Función Bash para generar contraseña aleatoria

La siguiente función se utiliza para generar contraseñas seguras aleatorias con un carácter especial para la longitud dada. Si la longitud no se proporciona de forma predeterminada, se genera con una longitud de 12 caracteres.

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

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

En el ejemplo anterior, cuando rpass se ejecuta con el argumento 6, genera una contraseña aleatoria con 6 caracteres y rpass sin argumento genera una contraseña de 12 caracteres de longitud. ${1:-12} significa que si $1 no está establecido o se devolverá un valor nulo 12, de lo contrario se sustituirá el valor de $1.

Ejemplo 4. Función Bash para obtener la dirección IP de una interfaz dada

El siguiente ejemplo define una función llamada 'getip' que acepta el nombre de la interfaz como argumento y proporciona la dirección IP asignada en la interfaz dada en la máquina. (por defecto devuelve la dirección IP eth0). Esto usa el comando ifconfig para obtener la dirección 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

Ejemplo 5. Función Bash para imprimir los detalles de las máquinas

Este ejemplo define la función que proporciona toda la información necesaria sobre la máquina. Los usuarios pueden definir y llamar a esta función en los archivos de inicio, para que obtenga esta información durante el inicio.

$ 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

Ejemplo 6:función Bash para formatear mejor la salida de ls

La siguiente función borrará la pantalla, colocará el cursor en la parte superior de la pantalla, ejecutará ls y luego colocará el cursor al final de la pantalla.

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

$ ll

Mostrar el código de función usando el comando de tipo

type es un shell integrado que se usa para ver el código de función.

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"
}

Para su fácil referencia, obtenga las 6 funciones mencionadas en este artículo de este archivo de funciones .bash_profile de muestra.

Agregue todas estas funciones a su archivo ~/.bash_profile, para asegurarse de tener acceso a estas funciones todo el tiempo sin tener que crearlas cada vez.


Linux
  1. ¿Funciones en variables de Shell?

  2. Bash Beginner Series #9:Uso de funciones en Bash

  3. Tutorial de estado de salida de Bash Shell con ejemplos prácticos

  4. El último tutorial de Bash Array con 15 ejemplos

  5. Tutorial de referencia y desreferenciación de matrices de Perl con ejemplos prácticos

Bash Scripting - Funciones explicadas con ejemplos

Sintaxis de Bash If Else con ejemplos

Tutorial de Unix Sed:operación de archivos de varias líneas con 6 ejemplos prácticos

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos

Tutorial de variables Bash:6 ejemplos prácticos de variables locales y globales de Bash

El tutorial Ultimate Tar Command con 10 ejemplos prácticos