La función es un bloque de código reutilizable. A menudo ponemos código repetido en una función y llamamos a esa función desde varios lugares. La biblioteca es una colección de funciones. Podemos definir funciones de uso común en una biblioteca y otros scripts pueden usarlas sin duplicar el código.
En este artículo discutiremos más sobre funciones y recetas. Para fines de demostración, usaré Bourne otra vez SHell (Bash) en la máquina Ubuntu.
función de llamada
En Shell, la función de llamada es exactamente igual que llamar a cualquier otro comando. Por ejemplo, si el nombre de su función es my_func, entonces se puede ejecutar de la siguiente manera:
$ my_func
Si alguna función acepta argumentos, se pueden proporcionar desde la línea de comando de la siguiente manera:
$ my_func arg1 arg2 arg3
Definición de función
Podemos usar la siguiente sintaxis para definir la función:
function function_name { Body of function }
El cuerpo de la función puede contener cualquier comando válido, restricción de bucle, otra función o secuencia de comandos. Ahora vamos a crear una función simple que muestre un mensaje en la pantalla.
function print_msg { echo "Hello, World" }
Ahora vamos a ejecutar esta función:
$ print_msg Hello, World
Como era de esperar, esta función muestra un mensaje en la pantalla.
En el ejemplo anterior, hemos creado una función directamente en la terminal. También podemos almacenar esta función en un archivo. El siguiente ejemplo demuestra esto.
#! /bin/bash function print_msg { echo "Hello, World" } print_msg
Hemos definido esta función dentro función.sh Archivo. Ahora vamos a ejecutar este script:
$ chmod +x function.sh $ ./function.sh Hello, World
Si observa, la salida anterior es exactamente idéntica a la anterior.
Más sobre funciones
En la sección anterior hemos definido una función muy básica. Sin embargo, durante el desarrollo del software necesitamos funciones más avanzadas que puedan aceptar varios parámetros y valores de retorno. En esta sección discutiremos tales funciones.
Pasar argumentos a la función
Podemos proporcionar argumentos para que funcionen igual que otros comandos. Podemos acceder a estos argumentos desde la función usando el símbolo de dólar ($). Por ejemplo, $1 representa el primer argumento, $2 representa el segundo argumento y así sucesivamente.
Modifiquemos la función anterior para aceptar el mensaje como argumento. Nuestra función modificada se verá así:
function print_msg { echo "Hello $1" }
En la función anterior estamos accediendo al primer argumento usando $1. Ejecutemos esta función:
$ print_msg "LinuxTechi"
Cuando ejecute esta función, generará el siguiente resultado:
Hello LinuxTechi
Devolviendo el valor de la función
Al igual que otros lenguajes de programación, Bash proporciona una declaración de devolución mediante la cual podemos devolver valor a la persona que llama. Entendamos esto con un ejemplo:
function func_return_value { return 10 }
La función anterior devuelve el valor 10 a su llamador. Ejecutemos esta función:
$ func_return_value $ echo "Value returned by function is: $?"
Cuando ejecute la función anterior, generará el siguiente resultado:
Value returned by function is: 10
NOTA: En bash tenemos que usar $? para capturar el valor de retorno de la función
Recetas de función
Hasta ahora tenemos una idea clara de las funciones de bash. Ahora vamos a crear algunas funciones bash útiles que pueden usarse para hacernos la vida más fácil.
Registrador
Vamos a crear una función de registro que imprimirá la fecha y la hora junto con el mensaje de registro.
function log_msg { echo "[`date '+ %F %T'` ]: [email protected]" }
Ejecutemos esta función:
$ log_msg "This is sample log message"
Cuando ejecute esta función, generará el siguiente resultado:
[ 2018-08-16 19:56:34 ]: This is sample log message
Mostrar información del sistema
Vamos a crear una función para mostrar información sobre el sistema GNU/Linux
function system_info { echo "### OS information ###" lsb_release -a echo echo "### Processor information ###" processor=`grep -wc "processor" /proc/cpuinfo` model=`grep -w "model name" /proc/cpuinfo | awk -F: '{print $2}'` echo "Processor = $processor" echo "Model = $model" echo echo "### Memory information ###" total=`grep -w "MemTotal" /proc/meminfo | awk '{print $2}'` free=`grep -w "MemFree" /proc/meminfo | awk '{print $2}'` echo "Total memory: $total kB" echo "Free memory : $free kB" }
Cuando ejecute la función anterior, generará el siguiente resultado:
### OS information ### No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionic ### Processor information ### Processor = 1 Model = Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz ### Memory information ### Total memory: 4015648 kB Free memory : 2915428 kB
Buscar archivo o directorio desde el directorio actual
La siguiente función busca archivos o directorios desde el directorio actual:
function search { find . -name $1 }
Busquemos en el directorio, a saber, dir4, usando el siguiente comando:
$ search dir4
Cuando ejecuta el comando anterior, generará el siguiente resultado:
./dir1/dir2/dir3/dir4
Reloj digital
La siguiente función crea un reloj digital simple en la terminal
function digital_clock { clear while [ 1 ] do date +'%T' sleep 1 clear done }
Creando biblioteca
La biblioteca es una colección de funciones. Para crear una biblioteca: defina funciones en un archivo e importe ese archivo en el entorno actual.
Supongamos que hemos definido todas las funciones en el archivo utils.sh y luego usamos el siguiente comando para importar funciones en el entorno actual:
$ source utils.sh
De ahora en adelante, puede ejecutar cualquier función de la biblioteca como cualquier otro comando bash.
Conclusión
En este artículo discutimos algunas recetas útiles que mejorarán su productividad. Espero que este artículo te inspire a crear tus propias recetas.
Leer también : Cómo usar la declaración condicional if else en Bash Script