Introducción
Una función bash es un método utilizado en scripts de shell para agrupar bloques de código reutilizables. Esta función está disponible para la mayoría de los lenguajes de programación, conocidos con diferentes nombres, como procedimientos, métodos o subrutinas.
Este artículo proporciona una descripción general completa de las funciones de bash, cómo funcionan y cómo usarlas.
Requisitos previos
- Un sistema que ejecuta Linux.
- Acceso a la terminal y shell Bash.
- Un editor de texto para escribir scripts bash (la guía usa Vim).
¿Qué son las funciones Bash?
Una función bash es una técnica para agrupar bits de código reutilizables bajo un nombre para su uso posterior. La función bash es como un script dentro de un script.
El uso de funciones en bash scripting tiene dos beneficios :
1. Una función se lee directamente en la memoria del shell y se almacena para su uso posterior. Dado que la memoria de la computadora no es un problema hoy en día, el uso de funciones es más rápido que repetir código.
2. Las funciones ayudan a organizar largos scripts de shell en bloques de código modulares y reutilizables. Los fragmentos son más fáciles de desarrollar y mantener .
¿Cómo utilizar las funciones de Bash?
Hay dos formas de implementar las funciones de Bash:
- Dentro de un script de shell, donde la definición de la función debe estar antes de cualquier llamada a la función.
- Junto con otros comandos de bash alias y directamente en la terminal como un comando.
Para usar las funciones de bash, siga los esquemas a continuación.
Sintaxis de la función Bash
Hay dos formas diferentes de declarar una función bash:
1. El formato más utilizado es:
<function name> () {
<commands>
}
Alternativamente, la misma función puede ser una línea:
<function name> () { <commands>; }
2. La forma alternativa de escribir una función bash es usar la palabra reservada function
:
function <function name> {
<commands>
}
O en una línea:
function <function name> { <commands>; }
Tome nota de los siguientes comportamientos y consejos al usar funciones:
- Al escribir en una línea, los comandos deben terminar con un punto y coma (
;
), ya sea en bash scripts o directamente en la terminal. - Agregar la
function
palabra reservada hace que los paréntesis sean opcionales. - Los comandos entre llaves
{ <commands> }
se llaman el cuerpo de la función . El cuerpo puede contener cualquier cantidad de declaraciones, variables, bucles o declaraciones condicionales. - Intente usar nombres descriptivos para las funciones. Aunque no es necesario cuando se prueban funciones y comandos, los nombres descriptivos ayudan en las configuraciones donde otros desarrolladores miran el código.
¿Cómo declarar y llamar a una función?
Una función no se ejecuta cuando se declara. El cuerpo de la función se ejecuta cuando se invoca después de la declaración. Siga los pasos a continuación para crear un script bash con varias opciones de sintaxis:
1. Usando su editor de texto favorito, cree un script de shell llamado sintaxis . Si está utilizando Vim, ejecute la siguiente línea en la terminal:
vim syntax.sh
2. Agregue el siguiente código al script de shell:
# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
echo Hello I\'m function 1
echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }
# Declaring functions without the function reserved word
# Multiline
f3 () {
echo Hello I\'m function 3
echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }
# Invoking functions
f4
f3
f2
f1
El script hace lo siguiente:
- Líneas 4-9 demostrar cómo definir una función usando la
function
palabra reservada. La funciónf1
usa una sintaxis multilínea en las líneas 4-6, mientras quef2
usa sintaxis de una línea en la línea 9. - Líneas 13-18 mostrar la sintaxis más familiar.
f3
es una función multilínea definida en las líneas 13-16, mientras quef4
en la línea 18 es el equivalente de una sola línea. - Líneas 21-24 invocar las funciones previamente definidas y ejecutar los comandos en los cuerpos de las funciones correspondientes. Las llamadas se realizan en orden inverso a la definición.
3. Guarde el script y cierre Vim:
:wq
4. Haz el syntax.sh archivo ejecutable:
chmod +x syntax.sh
5. Por último, ejecute el script para ver el resultado:
./syntax.sh
¿Cómo declarar y llamar a una función en la terminal?
Para declarar y usar una función en la terminal:
1. Abra la terminal e ingrese la siguiente línea:
my_function () { echo "Hello I'm a function"; echo "Bye!"; }
2. Ejecute la función ingresando el nombre de la función en el terminal:
my_function
La salida ejecuta los comandos en el cuerpo de la función.
La función solo permanece definida en la sesión de terminal actual. Para guardar para sesiones futuras, agregue el código a ~/.bashrc archivo.
¿Dónde se define una función Bash?
Para ver dónde se define una función bash y su contenido, ingrese los siguientes comandos en la terminal:
1. Ejecute bash shell en modo depurador:
bash --debugger
2. Verifique el archivo fuente de la función con:
declare -F <function name>
Por ejemplo:
declare -F my_function
La salida imprime el nombre de la función, el número de línea y la ubicación del archivo donde se encuentra la definición de la función.
3. Para ver el contenido de la función, ejecute:
declare -f <function name>
Por ejemplo:
declare -f my_function
declare
el modo de depuración integrado permite ver el contenido y la ubicación de la función sin ejecutar el código.
¿Cómo eliminar una función Bash?
Si necesita liberar un espacio de nombres ocupado por una función en la sesión de terminal actual, ejecute:
unset <function name>
Por ejemplo:
unset my_function
La función ya no está disponible en la sesión de terminal actual. Sin embargo, si el código está en ~/.bashrc archivo, todo se restaura a la normalidad en la siguiente sesión.
Variables de la función Bash
Las variables en bash son globales por defecto y accesibles desde cualquier lugar, incluidos los cuerpos de las funciones. Las variables definidas dentro de una función también son globales. Agregar la palabra clave local
hace que el término sea accesible solo dentro de la función y las funciones/procesos secundarios.
En ámbito dinámico , una variable local sombras una variable global cuando las dos llevan el mismo nombre.
Pruebe el siguiente script de bash para demostrar cómo funcionan las variables de función en bash:
1. Cree un script llamado variable.sh :
vim variable.sh
2. Agregue el siguiente código al script:
var1=1
var2=1
change() {
echo Inside function
echo Variable 1 is: $var1
echo Variable 2 is: $var2
local var1=5
var2=5
echo
echo After change inside function
echo Variable 1 is locally $var1
echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
El script muestra lo siguiente:
- Líneas 1-2 declarar variables
var1
yvar2
y establezca ambos en1
. - Líneas 5 y 6 están dentro del cuerpo de la función e imprimen las variables en la consola. Dado que el alcance de la variable es global, se imprimen los valores originales.
- Línea 7 declara una nueva variable local con el mismo nombre que la variable global
var1
. Ellocal var1
sombrea elvar1
global valor debido al alcance dinámico. - Línea 8 cambia el valor de
var2
global variables. - Líneas 14-22 imprime los valores de las variables antes y después de llamar a la función.
3. Guarde el script y salga de Vim:
:wq
4. Cambie los permisos del archivo a ejecutable:
chmod +x variable.sh
5. Ejecute el script y analice los resultados:
./variable.sh
Los valores de las variables se imprimen en la consola a través de los cambios realizados en el script.
Argumentos de la función Bash
Para pasar argumentos a una función, agregue los parámetros después de la llamada a la función separados por espacios. La siguiente tabla describe las opciones disponibles cuando se trabaja con argumentos de función bash.
Argumento | Rol |
---|---|
$0 | Reserva el nombre de la función cuando se define en la terminal. Cuando se define en un script bash, $0 devuelve el nombre y la ubicación del script. |
$1 , $2 , etc. | Corresponde a la posición del argumento después del nombre de la función. |
$# | Retiene el conteo de argumentos posicionales pasados a la función. |
[email protected] y $* | Mantiene la lista de argumentos posicionales y funciona de la misma manera cuando se usa de esta manera. |
"[email protected]" | Expande la lista para separar cadenas. Por ejemplo "$1", "$2" , etc. |
"$*" | Expande la lista en una sola cadena, separando los parámetros con un espacio. Por ejemplo "$1 $2" etc. |