Table of Contents
Comprensión y escritura de funciones en scripts de shell-Parte VI
Las funciones juegan un papel importante en cualquier lenguaje de programación. Como muchos lenguajes de programación reales, bash tiene funciones que se utilizan con una implementación limitada.
Comprensión de las funciones del script de shell de Linux
¿Qué son las funciones?
En programación, las funciones son secciones con nombre 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 a una función, el programa abandona la sección de código actual y comienza a ejecutar la primera línea dentro de la función. Siempre que haya código repetitivo o cuando una tarea se repita, 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 el mismo en múltiples ocasiones.
¿Por qué escribimos funciones?
- Nos ayuda a reutilizar el código.
- Mejorar la legibilidad del programa.
- Uso eficiente de variables dentro del programa.
- Permite nosotros para probar el programa parte por parte.
- Muestra el programa como un grupo de subpasos.
Funciones en scripts de shell
La sintaxis general para escribir funciones en script de shell incluye las siguientes formas.
function func_name . . . comandos. . . o func_name () . . . comandos. . . La apertura de llaves también se puede utilizar en la segunda línea. func_name () . . . comandos. . .
Siempre tiene la libertad de escribir comandos válidos dentro de estos bloques de función, como lo hacemos normalmente en los scripts de shell. Ahora intentemos escribir un script simple con una pequeña función dentro.
#!/Bin/bash call_echo () echo ‘Esto está dentro de la función’ op = $ 1 if [$ #-ne 1]; luego repita “Uso: $ 0 <1/0>” de lo contrario si [$ 1 = 0]; luego echo “Esto es una función externa” elif [$ 1 = 1]; luego call_echo else echo ‘Argumento no válido’ fi fi exit 0 freestar.config.enabled_slots.push
La definición de la 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 funciones.
Nota. -Escribir funciones vacías siempre resulta en errores de sintaxis.
Cuando la misma función se define varias veces, la versión final es la que se invoca. Tomemos un ejemplo.
#!/Bin/bash func_same () echo ‘Primera definición’ func_same () echo ‘Segunda definición’ func_same exit 0 Funciones que toman parámetros y devuelven valores
Profundicemos considerando funciones que toman parámetros y devuelven valores. Para devolver un valor de una función usamos el shell “return” incorporado. La sintaxis es la siguiente.
func_name () . . . comandos. . . return $ ret_val
De manera similar, 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 y así sucesivamente. Mire el siguiente script de ejemplo para encontrar el máximo de dos enteros usando la función para agregar más claridad.
#!/Bin/bash USG_ERR = 7 max_two () if [“$ 1”-eq “$ 2”]; luego echo ‘Igual’ salida 0 elif [“$ 1”-gt “$ 2”]; luego echo $ 1 si no echo $ 2 fi err_str () echo “Uso: $ 0
Lo anterior parece un poco complejo, pero es simple si leemos las líneas. Primero anida las líneas if-else if para fines de validación, es decir, para verificar el número y 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 números enteros grandes desde una función. Otra forma de solucionar este problema es utilizar variables globales para almacenar el resultado dentro de la función. El siguiente script explica este método.
#!/bin/bash USG_ERR = 7 ret_val = max_two () if [“$ 1”-eq “$ 2”]; luego echo ‘Igual’ salida 0 elif [“$ 1”-gt “$ 2”]; entonces ret_val = $ 1 si no ret_val = $ 2 fi err_str () echo “Uso: $ 0
Ahora pruebe algunos problemas interesantes que se explicaron en la serie anterior de scripts de shell usando las siguientes funciones.
- Comprender los consejos básicos del lenguaje de secuencias de comandos de shell de Linux-Parte I
- 5 secuencias de comandos de Shell para que los principiantes de Linux aprendan la programación de Shell-Parte II
- Navegando por el mundo de Linux Scripting BASH-Parte III
- Aspecto matemático de la programación de shell de Linux-Parte IV
- Cálculo de expresiones matemáticas en lenguaje de script de Shell-Parte V
Volveré con más información sobre características funcionales como el uso de variables locales, recursividad, etc. en la siguiente parte. Manténgase actualizado con los comentarios.