Androide

Funciones bash

6.-Funciónes en Bash

6.-Funciónes en Bash

Tabla de contenido:

Anonim

Una función Bash es esencialmente un conjunto de comandos que se pueden llamar varias veces. El propósito de una función es ayudarlo a hacer que sus scripts de bash sean más legibles y evitar escribir el mismo código una y otra vez.

En comparación con la mayoría de los lenguajes de programación, las funciones de Bash son algo limitadas. En este tutorial, cubriremos los conceptos básicos de las funciones de Bash y le mostraremos cómo usarlos en sus scripts de shell.

Declaración de la función bash

La sintaxis para declarar una función bash es muy simple. Se pueden declarar en dos formatos diferentes:

  1. El primer formato comienza con el nombre de la función, seguido de paréntesis. Este es el formato preferido y más utilizado.

    function_name () { commands }

    Versión de línea única:

    function_name () { commands; }

    El segundo formato comienza con la palabra reservada de la function seguida del nombre de la función.

    function function_name { commands }

    Versión de línea única:

    function function_name { commands; }

Pocos puntos a tener en cuenta:

  • La lista de comandos entre llaves {} es el cuerpo de la función. Las llaves que rodean el cuerpo de la función deben estar separadas del cuerpo por espacios o líneas nuevas. Al definir una función no se ejecuta. Para invocar una función bash, simplemente use el nombre de la función. Los comandos entre las llaves se ejecutan cada vez que se llama a la función en el script de shell. La definición de la función se debe colocar antes de cualquier llamada a la función. Cuando se usan funciones de "línea compacta", un punto y coma ; debe seguir el último comando en la función. Siempre debe intentar mantener descriptivos los nombres de sus funciones.

Para entender esto mejor, eche un vistazo al siguiente ejemplo:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Analicemos el código línea por línea:

  • En la línea 3 estamos definiendo la función dándole un nombre y abriendo la llave rizada { que marca el inicio del cuerpo de la función. La línea 4 es el cuerpo de la función. El cuerpo de la función puede contener múltiples comandos y declaraciones de variables. La línea 5 , el corchete de cierre } , define el final de la función hello_world . En la línea 7 estamos ejecutando la función. Puede ejecutar la función tantas veces como lo necesite.

Si ejecuta el script, imprimirá hello, world .

Alcance de variables

Las variables globales son variables a las que se puede acceder desde cualquier parte del script, independientemente del alcance. En Bash, todas las variables por defecto se definen como globales, incluso si se declaran dentro de la función.

Las variables locales se pueden declarar dentro del cuerpo de la función con la palabra clave local y solo se pueden usar dentro de esa función. Puede tener variables locales con el mismo nombre en diferentes funciones.

Para ilustrar mejor cómo funciona el alcance de variables en Bash, consideremos un ejemplo:

~ / variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

El script comienza definiendo dos variables globales var1 y var2 . Luego, una función que establece una variable local var1 y modifica la variable global var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Del resultado anterior, podemos concluir que:

  • Si establece una variable local dentro del cuerpo de la función con el mismo nombre que una variable global existente, tendrá prioridad sobre la variable global. Las variables globales se pueden cambiar desde dentro de la función.

Valores de retorno

A diferencia de las funciones en lenguajes de programación "reales", las funciones Bash no le permiten devolver un valor cuando se le llama. Cuando se completa una función bash, su valor de retorno es el estado de la última instrucción ejecutada en la función, 0 para el éxito y un número decimal distinto de cero en el rango de 1 a 255 para el fracaso.

El estado de retorno se puede especificar utilizando la palabra clave return y se asigna a la variable $? . La declaración de return termina la función. Puede considerarlo como el estado de salida de la función.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Para devolver un valor arbitrario de una función, necesitamos usar otros métodos. La opción más simple es asignar el resultado de la función a una variable global:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Otra opción mejor para devolver un valor de una función es enviar el valor a stdout usando echo o printf como se muestra a continuación:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

En lugar de simplemente ejecutar la función que imprimirá el mensaje en stdout, estamos asignando la salida de la función a la variable func_result usando la sustitución del comando $() . La variable se puede usar más tarde según sea necesario.

Pasar argumentos a las funciones Bash

Para pasar cualquier número de argumentos a la función bash simplemente colóquelos justo después del nombre de la función, separados por un espacio. Es una buena práctica citar dos veces los argumentos para evitar el análisis erróneo de un argumento con espacios en él.

  • Los parámetros pasados ​​son $1 , $2 , $3 $n , correspondientes a la posición del parámetro después del nombre de la función. La variable $0 está reservada para el nombre de la función. La variable $# contiene el número de parámetros / argumentos posicionales pasados ​​al Las variables $* y $@ contienen todos los parámetros / argumentos posicionales pasados ​​a la función.
    • Cuando se cita doblemente, "$*" expande a una sola cadena separada por espacio (el primer carácter de IFS) - "$1 $2 $n" . Cuando se cita doblemente, "$@" expande para separar cadenas - "$1" "$2" "$n" . Cuando no se cita doblemente, $* y $@ son lo mismo.

Aquí hay un ejemplo:

~ / passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Conclusión

Una función Bash es un bloque de código reutilizable diseñado para realizar una operación particular. Una vez definida, la función se puede llamar varias veces dentro de un script.

También puede leer sobre cómo usar una función Bash para crear un comando de acceso directo memorable para un comando más largo.

terminal de bash