GNU/Linux >> Tutoriales Linux >  >> Linux

Función Bash y cómo usarla {Variables, Argumentos, Retorno}

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ón f1 usa una sintaxis multilínea en las líneas 4-6, mientras que f2 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 que f4 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 y var2 y establezca ambos en 1 .
  • 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 . El local var1 sombrea el var1 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.

Siga los pasos a continuación para probar cómo funcionan los distintos argumentos en una función.

1. Cree un script llamado argumentos :

vim arguments.sh

2. Agregue el siguiente código al script:

arguments () {
        echo The function location is $0
        echo There are $# arguments
        echo "Argument 1 is $1"
        echo "Argument 2 is $2"
        echo "<[email protected]>" and "<$*>" are the same.
        echo List the elements in a for loop to see the difference!
        echo "* gives:"
        for arg in "$*"; do echo "<$arg>"; done
        echo "@ gives:"
        for arg in "[email protected]"; do echo "<$arg>"; done
}

arguments hello world

3. Guarde el script y salga de Vim:

:wq

4. Haga que el script sea ejecutable:

chmod +x arguments.sh

5. Ejecute el script:

./arguments.sh

La salida muestra mensajes descriptivos para cada argumento utilizado.

Retorno de la función Bash

Las funciones de Bash difieren de la mayoría de los lenguajes de programación cuando se trata de devolver un valor de una función. Por defecto, bash devuelve el estado de salida del último comando ejecutado en el cuerpo de la función.

La siguiente secuencia de comandos muestra cómo especificar el estado de salida usando return:

1. Cree un script y asígnele el nombre test.sh :

vim test.sh

2. Agregue la siguiente función al archivo:

test_function() {
        echo Test
        return 100
}
echo The function\'s output is: 
test_function
echo The exit status is:
echo $?

3. Guarde y cierre el editor de texto:

:wq

4. Cambia los permisos:

chmod +x test.sh

5. Ejecute el script para ver la salida de la función y el estado de salida:

./test.sh

Un método alternativo es hacer eco del resultado de la función y asignar la salida a una variable. Edite el test.sh script con el siguiente código:

test_function() {
        echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use

Este método imita cómo funcionan la mayoría de los lenguajes de programación cuando se usan funciones.


Linux
  1. Cómo usar los comandos del historial de Bash

  2. Cómo usar la declaración condicional if else en Bash Script

  3. ¿Cómo uso las líneas de un archivo como argumentos de un comando?

  4. ¿Cómo usar kill SIGUSR2 en bash?

  5. cómo usar correctamente $1 en un alias con dos argumentos

Cómo usar operadores de prueba de archivos Bash en Linux

Cómo usar el comando de fecha en Bash Scripting en Linux

Cómo usar el comando Declare en Linux Bash Shell

Cómo usar el comando echo en Bash Scripts en Linux

Cómo usar execl (ejemplo incluido)

¿Cómo usar Linux Bash Shell dentro de Windows 10?

    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.