Cómo usar las funciones en Bash
- Definir funciones en Bash
- Alcance de las variables en Bash
- Valores de retorno de la función en Bash
- Pasar argumentos a una función 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:
bashCopyfunction_name(){
statements
}
bashCopyfunction_name() { statements }
En este enfoque, especificamos la palabra clave function
antes del nombre de la función.
bashCopyfunction_name(){
statements
}
bashCopyfunction_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.
bashCopy#! /bin/bash
greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
Resultado:
textCopyHello, 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:
bashCopy#! /bin/bash
function greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
Resultado:
textCopyHello, 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.
bashCopy#! /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:
textCopyBefore 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.
bashCopy#! /bin/bash
return_value(){
echo "This function returns 20!"
return 30
echo "After return statement"
}
return_value
echo $?
Resultado:
textCopyThis 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.
bashCopy#! /bin/bash
send_message(){
message_from_function="Hello From the function!"
}
send_message
echo $message_from_function
Resultado:
textCopyHello 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.
bashCopy#! /bin/bash
send_message(){
message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"
Resultado:
textCopyHello 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 is a backend software engineer at Matrice.ai.
LinkedIn