LinuxParty
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.
¿Qué son las funciones?
En programación, las funciones se denominan 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 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 un 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) todas y cada una de las veces, 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.
- Nos permite probar el programa parte a parte.
- Muestra el programa como un montón de subpasos.
Funciones en scripts de shell
La sintaxis general para escribir funciones en un script de shell incluye las siguientes formas.
function func_name { . . . comandos . . . } o func_name () { . . . comandos . . . } Las llaves de apertura también se pueden usar en la segunda línea. func_name () { . . . comandos . . . }
Siempre tiene la libertad de escribir comandos válidos dentro de estos bloques de funciones, 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 ‘This is inside function’ } op=$1 if [ $# -ne 1 ]; then echo "Usage: $0 <1/0>" else if [ $1 = 0 ] ; then echo ‘This is outside function’ elif [ $1 = 1 ] ; then call_echo else echo ‘Invalid argument’ fi fi exit 0
La definición de la función debe preceder a la primera llamada a ella. 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 da como resultado errores de sintaxis.
Cuando la misma función se define varias veces, la versión final es la que se invoca. Pongamos un ejemplo.
#!/bin/bash func_same ( ) { echo ‘First definition’ } func_same ( ) { echo ‘Second definition’ } func_same exit 0
Funciones que toman parámetros y devuelven valores
Profundicemos al considerar 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 ( ) { . . . commands . . . return $ret_val }
De manera similar, podemos pasar argumentos a las funciones separadas por 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" ] ; then echo 'Equal' exit 0 elif [ "$1" -gt "$2" ] ; then echo $1 else echo $2 fi } err_str ( ) { echo "Usage: $0 <number1> <number2>" exit $USG_ERR } NUM_1=$1 NUM_2=$2 x if [ $# -ne 2 ] ; then err_str elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then max_two $NUM_1 $NUM_2 else err_str fi else err_str fi exit 0
Lo anterior parece un poco complejo, pero es simple si leemos las líneas. Primero anida las líneas if-else if con 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" ] ; then echo 'Equal' exit 0 elif [ "$1" -gt "$2" ] ; then ret_val=$1 else ret_val=$2 fi } err_str ( ) { echo "Usage: $0 <number1> <number2>" exit $USG_ERR } NUM_1=$1 NUM_2=$2 if [ $# -ne 2 ] ; then err_str elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then max_two $NUM_1 $NUM_2 echo $ret_val else err_str fi else err_str fi exit 0
Ahora pruebe a resolver sus propios problemas, para entender mejor las funciones.

-
Ciencia
- ¿Adiós a las canas? La ciencia descubre cómo revertir el proceso de las canas
- Nuevos estudios científicos sugieren que la Sábana Santa podría tener 2.000 años de antigüedad
- Mark Thomson, del CERN: La IA revolucionará la física fundamental
- Por qué incluso los físicos siguen sin entender la teoría cuántica 100 años después
- Se descubrieron tres nuevos materiales superconductores en 2024
- Desigualdad global en las tasas de natalidad: ¿Cómo afectará el baby boom y el baby bust a la economía en 2100?
- El agujero más cercano al centro de la tierra. Voronya
- Microplásticos y seguridad alimentaria. Capitulo III. Mecanismos moleculares e impacto de los microplásticos en la salud humana.
- Microplásticos Y Seguridad Alimentaria. Capítulo II
- La Lima de Cañaveral, Cáceres, oriunda de ésta zona, es exclusiva y está en peligro de extinción.
- Microplásticos Y Seguridad Alimentaria. Capítulo I: Origen Y Generalidades.
- Glaciares de Sal Plantean la Probabilidad de Vida en Mercurio, el planeta más próximo al Sol.
- Hombre de Petralona: Un Enigma Cronológico que Desafía las Teorías Establecidas
- Implante Innovador Recupera Movilidad en Extremidades Paralizadas, Abriendo Camino a Curar la Parálisis.
- La Prótesis Biónica que Cambió la Vida de una Paciente Después de 20 Años de dolores