Conceptos básicos de las funciones de Shell

ShellBeginner
Practicar Ahora

Introducción

Al escribir scripts, a menudo necesitará repetir el mismo bloque de código varias veces. En lugar de volver a escribirlo o copiarlo y pegarlo, puede usar funciones.

Una función es un bloque de código con nombre que realiza una tarea específica. Usted la define una vez y después puede llamarla cuando la necesite. Esto hace que sus scripts sean:

  • Modulares: más fáciles de leer y administrar.
  • Reutilizables: se escriben una vez y se utilizan muchas veces.
  • Fáciles de mantener: si necesita cambiar la lógica, solo debe actualizarla en un lugar.

Las funciones son importantes porque los scripts grandes se vuelven difíciles de comprender cuando todo está dentro de un único bloque largo, ejecutado de arriba abajo. Dividir un script en funciones es uno de los primeros pasos para pasar de un «apaño rápido en Shell» a una automatización fácil de mantener.

En este laboratorio aprenderá los fundamentos para reescribir un script mediante funciones. Usted:

  1. Creará un script básico.
  2. Definirá una función llamada greet_user.
  3. Llamará a la función para ejecutarla.
  4. Mejorará la función para que acepte parámetros (argumentos).

Cree el archivo del script

Comience preparando el espacio de trabajo. Creará un archivo llamado functions.sh para guardar el código.

En esta etapa, el archivo del script solo será un contenedor. Lo importante en este laboratorio no es el archivo en sí, sino la idea de organizar un script en bloques con nombre en lugar de mantener una única secuencia larga ejecutada de arriba abajo.

Primero, vaya al directorio del proyecto y cree el archivo:

cd ~/project
touch functions.sh

Después, abra el archivo en el editor de texto para añadir la cabecera Shebang estándar:

nano functions.sh

Añada la siguiente línea al principio del archivo:

#!/bin/bash

Guarde el archivo (Ctrl+O, Enter) y salga (Ctrl+X).

Por último, haga que el script sea ejecutable para poder ejecutarlo más adelante:

chmod +x functions.sh

Ahora está listo para comenzar a escribir código.

Defina una función

Ahora definirá una función llamada greet_user.

En Bash, una función se define escribiendo su nombre seguido de paréntesis () y encerrando el bloque de código entre llaves {}.

Una función proporciona un nombre reutilizable para un bloque de comandos. Así los scripts de Shell son más legibles: en lugar de ver comandos sin contexto por todo el código, empezará a ver acciones con nombres significativos, como backup_files, check_disk o greet_user.

La sintaxis es la siguiente:

function_name() {
  ## Commands to execute
}

Vuelva a abrir el script:

nano functions.sh

Añada la siguiente definición de función debajo de la línea Shebang:

#!/bin/bash

greet_user() {
  echo "Hello"
}

Importante: en este momento solo ha definido la función. Todavía no le ha indicado al script que la ejecute. Si ejecutara el script ahora, no ocurriría nada. Este es un punto que suele confundir a los principiantes: definir una función no la ejecuta automáticamente.

Esta diferencia es importante porque un script de Shell se lee y se ejecuta en orden. Una definición de función enseña a Bash qué significa la función, pero el cuerpo de la función no se ejecuta hasta que se llama a su nombre más adelante.

Guarde el archivo y salga por ahora.

Llame a la función

Para ejecutar el código de una función, debe «llamarla». En Bash, basta con escribir el nombre de la función en una línea nueva. No es necesario usar paréntesis al llamarla.

Esto puede resultar extraño al principio, porque muchos lenguajes de programación utilizan paréntesis al llamar a una función. En Bash, greet_user por sí solo se trata como un comando. Si existe una función con ese nombre, Bash ejecuta el cuerpo de la función.

Abra el script:

nano functions.sh

Añada la llamada a la función al final del archivo:

#!/bin/bash

greet_user() {
  echo "Hello"
}

## The Main Logic starts here
greet_user

Guarde el archivo y salga.

Ahora, ejecute el script:

./functions.sh

Cuando se ejecuta el script, el intérprete de comandos encuentra el comando greet_user, localiza la definición de la función, ejecuta echo "Hello" y continúa después.

En este sentido, una función se comporta como un comando personalizado que solo existe dentro del script o de la sesión actual del intérprete de comandos. Por eso las funciones son tan útiles para crear acciones de nivel superior a partir de comandos de Shell más pequeños.

Debería ver la siguiente salida:

Hello

Pase argumentos a la función

Una función que siempre hace exactamente lo mismo, como imprimir "Hello", tiene un uso limitado. Para hacerla más útil, puede pasarle datos. Estos datos se denominan argumentos.

Dentro de una función, puede acceder a los argumentos mediante variables especiales como $1, $2, etc., igual que con los argumentos de un script.

  • $1 hace referencia al primer argumento que se pasa a la función.
  • $2 hace referencia al segundo argumento, y así sucesivamente.

Estos argumentos son independientes de los parámetros posicionales propios del script cuando se ejecuta la función. En otras palabras, las funciones pueden tener su propia interfaz de entrada, lo que facilita reutilizarlas con distintos valores.

Modifique la función para que salude a un nombre específico.

Paso 1: actualice la definición de la función

Abra el archivo:

nano functions.sh

Cambie la función greet_user para que use $1 en lugar de una cadena fija:

greet_user() {
  echo "Hello $1"
}

Paso 2: actualice la llamada a la función

Ahora que la función espera un argumento, debe proporcionárselo al llamarla.

Cambie la llamada de greet_user a greet_user "LabEx".

El archivo debería quedar así:

#!/bin/bash

greet_user() {
  echo "Hello $1"
}

greet_user "LabEx"

Guarde el archivo y salga.

Paso 3: pruebe el script

Vuelva a ejecutar el script:

./functions.sh

La salida debería ser:

Hello LabEx

En esencia, ha creado un comando personalizado que recibe una entrada y la procesa. Más adelante en el script podría llamar a greet_user "Alice" o greet_user "Bob", y la función se adaptaría en cada caso.

Resumen

En este laboratorio aprendió los conceptos básicos de las funciones de Bash:

  1. Definición: crear un bloque de código con nombre mediante name() { ... }.
  2. Llamada: ejecutar la función escribiendo simplemente su nombre.
  3. Argumentos: pasar datos a la función y acceder a ellos mediante $1, $2, etc.

Las funciones son los bloques fundamentales de los scripts complejos. Permiten organizar la lógica, reducir la repetición y hacer que el código sea más fácil de leer y mantener.