Comprender y escribir funciones en scripts de shell - Parte VI

Comprender y escribir funciones en scripts de shell - Parte VI

Las funciones juegan un papel importante en cualquier lenguaje de programación. Al igual que muchos lenguajes de programación reales, Bash tiene funciones que se utilizan con implementación limitada.

Comprender las funciones de script de shell de Linux

¿Qué son las funciones??

En la programación, las funciones se nombran secciones de un programa que realiza una tarea específica. En este sentido, una función es un tipo de procedimiento o rutina. Cuando se llama una función, el programa deja la sección actual del código y comienza a ejecutar la primera línea dentro de la función. Siempre que haya un código repetitivo o cuando se repita una tarea, considere usar una función en su lugar.

Por ejemplo, considere el caso en el que necesitamos encontrar el factorial de un número en varias etapas de un programa en particular. En lugar de escribir todo el código (para calcular el factorial) cada vez, podemos escribir esa parte del código que calcula el factorial una vez dentro de un bloque y reutilizar lo mismo en múltiples ocasiones.

¿Por qué escribimos funciones??

  1. Nos ayuda a reutilizar el código.
  2. Mejorar la legibilidad del programa.
  3. Uso eficiente de variables dentro del programa.
  4. Nos permite probar la parte del programa por parte.
  5. Muestra el programa como un montón de subpasos.
Funciones en scripts de shell

La sintaxis general para escribir funciones en el script de shell incluye las siguientes formas.

función func_name ... comandos ... o func_name () ... comandos ... La apertura de los aparatos ortopédicos también se puede usar en la segunda línea. func_name () ... comandos ...

Siempre eres libre de escribir comandos válidos dentro de estos bloques de funciones como lo hacemos normalmente en scripts de shell. Ahora intentemos escribir un script simple con una función pequeña dentro de él.

#!/bin/bash call_echo () echo 'Esta es la función interior' op = $ 1 if [$# -ne 1]; luego echo "uso: $ 0" más si [$ 1 = 0]; Entonces echo 'esta es la función externa' elif [$ 1 = 1]; Entonces Call_eco else echo 'argumento inválido' fi Fi Salida 0

La definición de función debe preceder a la primera llamada. No hay nada como 'declarar la función' antes de llamarla. Y siempre podemos anidar funciones dentro de las funciones.

Nota:- Escribir funciones vacías siempre da como resultado errores de sintaxis.

Cuando la misma función se define varias veces, la versión final es lo que se invoca. Tomemos un ejemplo.

#!/bin/bash func_same () echo 'primera definición' func_same () echo 'segunda definición' func_same sale 0
Funciones que toman parámetros y valores de retorno

Vamos a profundizar considerando funciones tomando parámetros y valores de devolución. Para devolver un valor de una función, utilizamos el shell 'return' incorporado. La sintaxis es la siguiente.

func_name () ... comandos ... return $ ret_val

Del mismo modo, podemos pasar argumentos a las funciones separadas con espacios como se indica a continuación.

func_name $ arg_1 $ arg_2 $ arg_3

Dentro de la función podemos acceder a los argumentos en orden como $ 1, $ 2, $ 3, etc. Mire el siguiente script de ejemplo para encontrar el máximo de dos enteros utilizando la función para agregar más claridad.

#!/bin/bash usg_err = 7 max_two () if ["$ 1" -eq "$ 2"]; luego se eco 'igual' salida 0 elif ["$ 1" -gt "$ 2"]; Entonces echo $ 1 más echo $ 2 fi err_str () echo "uso: $ 0" Salir $ usg_err num_1 = $ 1 num_2 = $ 2 x if [$# -ne 2]; Entonces Err_str Elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; luego si ['expr $ num_2:' [0-9]*"-eq $ #num_2]] ; entonces max_two $ num_1 $ num_2 else err_str fi más err_str fi -salida 0

Lo anterior parece un poco complejo, pero es simple si leemos las líneas. Primero anidados if-else si las líneas para fines de validación i.mi., Para verificar el número y el tipo de argumentos con la ayuda de expresiones regulares. Después de eso llamamos a la función con dos argumentos de línea de comando y muestra el resultado allí mismo. Esto se debe a que no podemos devolver enteros grandes de una función. Otra forma de trabajar en torno a este problema es usar variables globales para almacenar la función de dentro del resultado. El script a continuación explica este método.

#!/bin/bash usg_err = 7 ret_val = max_two () if ["$ 1" -eq "$ 2"]; luego se eco 'igual' salida 0 elif ["$ 1" -gt "$ 2"]; Entonces ret_val = $ 1 else ret_val = $ 2 fi err_str () echo "uso: $ 0" Salir $ usg_err num_1 = $ 1 num_2 = $ 2 if [$# -ne 2]; Entonces Err_str Elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; luego si ['expr $ num_2:' [0-9]*"-eq $ #num_2]] ; Entonces max_two $ num_1 $ num_2 echo $ ret_val else err_str fi else err_str fi salida 0

Ahora pruebe algunos problemas emocionantes que se explicaron en la serie anterior de scripts de shell utilizando funciones de la siguiente manera.

  1. Comprender los consejos básicos de lenguaje de secuencias de comandos de Linux - Parte I
  2. 5 scripts de shell para Linux Newbies para aprender la programación de shell - Parte II
  3. Navegando por el mundo de Linux Bash Scripting - Parte III
  4. Aspecto matemático de la programación de Shell Linux - Parte IV
  5. Calculación de expresiones matemáticas en el lenguaje de scripts de shell - Parte V

Volveré con más información sobre las características funcionales como usar variables locales, recursión, etc. en la siguiente parte. Mantente actualizado con comentarios.