GNU/Linux >> Tutoriales Linux >  >> Linux

Funciones bash

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 bash sean más legibles y evitar escribir el mismo código repetidamente. 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 usarlas en sus scripts de shell.

Definiendo funciones Bash #

La sintaxis para declarar una función bash es sencilla. Las funciones 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 una sola línea:

    function_name () { commands; }
  2. El segundo formato comienza con la palabra reservada function , seguido del nombre de la función.

    function function_name {
      commands
    }

    Versión de una sola línea:

    function function_name { commands; }

Algunos puntos a tener en cuenta:

  • Los comandos entre llaves ({} ) se llaman el cuerpo de la función. Las llaves deben estar separadas del cuerpo por espacios o saltos de línea.
  • Definir una función no la ejecuta. Para invocar una función bash, simplemente use el nombre de la función. Los comandos entre llaves se ejecutan cada vez que se llama a la función en el script de shell.
  • La definición de la función debe colocarse antes de cualquier llamada a la función.
  • Al usar funciones "compactas" de una sola línea, un punto y coma ; debe seguir el último comando en la función.
  • Siempre trate de mantener los nombres de sus funciones descriptivos.

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

~/hola_mundo.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. La llave { marca el inicio del cuerpo de la función.
  • Línea 4 es el cuerpo de la función. El cuerpo de la función puede contener múltiples comandos, sentencias y declaraciones de variables.
  • Línea 5 , el corchete de cierre } , define el final de hello_world función.
  • En línea 7 estamos ejecutando la función. Puede ejecutar la función tantas veces como necesite.

Si ejecuta el script, imprimirá hello, world .

Ámbito 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 local palabra clave y solo se puede 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 las variables en Bash, consideremos este 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 hay una función que establece una variable local var1 y modifica la variable global var2 .

Si ejecuta el script, debería ver el siguiente resultado:

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:

  • Cuando una variable local se establece 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 devueltos #

A diferencia de las funciones en los lenguajes de programación "reales", las funciones de Bash no le permiten devolver un valor cuando se las 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 devolución se puede especificar usando el return palabra clave, y se asigna a la variable $? . El return sentencia finaliza 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 sencilla 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 echoor 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 la salida estándar, estamos asignando la salida de la función a func_result variable usando el $() sustitución de mando. La variable se puede usar más tarde según sea necesario.

Pasar argumentos a funciones Bash #

Para pasar cualquier cantidad 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 usar comillas dobles en los argumentos para evitar el análisis erróneo de un argumento con espacios.

  • Los parámetros pasados ​​son $1 , $2 , $3$n , correspondiente a la posición del parámetro después del nombre de la función.
  • El $0 la variable está reservada para el nombre de la función.
  • El $# variable contiene el número de parámetros/argumentos posicionales pasados ​​a la función.
  • El $* y $@ las variables contienen todos los parámetros/argumentos posicionales pasados ​​a la función.
    • Cuando está entre comillas dobles, "$*" se expande a una sola cadena separada por espacios (el primer carácter de IFS) - "$1 $2 $n" .
    • Cuando está entre comillas dobles, "$@" se expande a cadenas separadas - "$1" "$2" "$n" .
    • Cuando no está entre comillas dobles, $* y $@ son iguales.

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 acerca de cómo usar una función Bash para crear un comando de acceso directo fácil de recordar para un comando más largo.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.


Linux
  1. ¿Funciones en variables de Shell?

  2. Obtener una lista de nombres de funciones en un script de shell

  3. ejecutar script php (función php) en linux bash

  4. Función Bash para encontrar el patrón de coincidencia de archivos más nuevo

  5. Canalizar la salida a la función bash

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

Bash Shebang

Shell Scripting Parte V:Funciones en Bash

Bash Scripting - Funciones explicadas con ejemplos

Bash Scripting Part6 - Crear y usar funciones de Bash

Tutorial de funciones de Bash Shell con 6 ejemplos prácticos