Cómo usar las funciones en Bash

Suraj Joshi 30 enero 2023
  1. Definir funciones en Bash
  2. Alcance de las variables en Bash
  3. Valores de retorno de la función en Bash
  4. Pasar argumentos a una función Bash
Cómo usar las funciones en Bash

Una función es uno de los aspectos más importantes de todo lenguaje de programación, y hace que nuestro código sea reutilizable y legible. El mismo código usado repetidamente se escribe dentro de una función. Y cuando necesitamos el bloque de código, simplemente llamamos a la función definida.

Definir funciones en Bash

Para definir las funciones en Bash, podemos usar cualquiera de los dos siguientes enfoques:

En este enfoque, escribimos el nombre de la función seguido de paréntesis. Luego definimos las funciones dentro de las llaves rizadas. Las funciones que usan este formato pueden ser definidas usando cualquiera de los formatos:

function_name(){
statements
}
function_name() { statements }

En este enfoque, especificamos la palabra clave function antes del nombre de la función.

function_name(){
statements
}
function_name() { statements }

Las declaraciones dentro de los corchetes determinan lo que hace la función. El nombre de la función no tiene nada que ver con lo que hace la función, pero debemos hacer que los nombres de las funciones sean descriptivos. Definir la función no hará nada. Para ejecutar los comandos de la definición de la función, debemos llamarla.

Para llamar a la función en Bash, usamos el nombre de la función.

#! /bin/bash

greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Resultado:

Hello, Folks. Welcome to DelftStack!

Aquí, definimos la función al principio con el nombre greet y luego llamamos a la función. Cuando llamamos a la función, se ejecutan las declaraciones dentro de la definición de la función, y por lo tanto vemos Hello, Folks. Welcome to DelftStack! impreso en el terminal.

También podemos definir la función usando otro enfoque como:

#! /bin/bash

function greet(){
    echo 'Hello, Folks. Welcome to DelftStack!'
}

greet

Resultado:

Hello, Folks. Welcome to DelftStack!

Debemos asegurarnos de que siempre definimos la función antes de llamarla.

Alcance de las variables en Bash

El alcance de las variables puede ser global o local en Bash como en otros lenguajes de programación. Sin embargo, el alcance por defecto de las variables es siempre global, incluso si se declara dentro del alcance de la función. Debemos usar la palabra clave local para hacer que una variable sea local.

#! /bin/bash

gvar1=1
gvar2=2

change_variables() {

    local gvar1=10
    gvar2=7
    
    echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}

echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"

change_variables

echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"

Resultado:

Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7

Aquí, gvar1 y gvar2 declaradas en la parte superior son variables globales.

Dentro de la función, gvar1 es declarada como una variable local ya que usamos la palabra clave local con gvar1 mientras que gvar2 todavía se refiere a una variable global ya que no tiene una palabra clave local. Por lo tanto, el valor de gvar2 se cambia globalmente por la función mientras que el valor de gvar1 se cambia sólo dentro de la función.

Valores de retorno de la función en Bash

A diferencia de otros lenguajes de programación, Bash no nos permite devolver valores de la función. El valor devuelto por la función Bash es el estado de la última sentencia ejecutada en la función. El número 0 representa el éxito, mientras que el número de 1-255 representa el fracaso. Podemos especificar el estado de salida de la función usando la palabra clave return. La sentencia return también termina la función.

#! /bin/bash

return_value(){
  echo "This function returns 20!"
  return 30
  echo "After return statement"
}

return_value
echo $?

Resultado:

This function returns 20!
30

Aquí, podemos ver que la función return_value devuelve el valor 30 usando la sentencia return, y el valor se asigna a la variable $?.

También podemos observar que la función se termina después de que se ejecuta la sentencia return, ya que los comandos que están debajo de la sentencia return no se ejecutan.

Si queremos devolver algún valor de una función, podemos asignar el valor a una variable global y acceder a la variable desde fuera de la función para recuperar el valor.

#! /bin/bash

send_message(){
  message_from_function="Hello From the function!"
}
send_message
echo $message_from_function

Resultado:

Hello From the function!

En el programa, asignamos el valor a devolver a la variable global message_from_function y luego accedemos al valor devuelto de la variable.

Pasar argumentos a una función Bash

Para pasar argumentos a una función Bash, simplemente ponemos los argumentos después de la función. Si queremos pasar más de un argumento a una función, separamos los argumentos por un espacio. Para evitar errores de comparación de los argumentos, podemos envolverlos en comillas dobles.

Se accede a los parámetros con $1 $2 y así sucesivamente en función de su posición. $0 representa el nombre de la función mientras que $# contiene el número de argumentos de posición en la función.

#! /bin/bash

send_message(){
  message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"

Resultado:

Hello Delft!

Aquí, el argumento Delft! se pasa a la función y se accede a él con el parámetro $1, y obtenemos Hello Delft! como salida final de la función.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn