Un script Bash es un archivo de texto sin formato. Este archivo contiene diferentes comandos para la ejecución paso a paso. Estos comandos se pueden escribir directamente en la línea de comandos, pero desde el punto de vista de la reutilización, es útil almacenar todos los comandos interrelacionados para una tarea específica en un solo archivo. Podemos usar ese archivo para ejecutar el conjunto de comandos una o más veces según nuestros requisitos.
Aquí, en este artículo, vamos a discutir el uso de funciones dentro de Bash Scripting.
En programación, una función es un bloque de código que realiza algunas tareas y se puede llamar varias veces para realizar tareas. Proporciona modularidad en el programa y reduce la longitud del código. El ejemplo más simple del uso de la función en Bash scripting se puede dar como:
Guión de ejemplo:
#!/bin/bash #It is a function myFunction () { echo Hello World from GeeksforGeeks } #function call myFunction
Producción:
Hello World from GeeksforGeeks
El ejemplo anterior muestra una función que imprime algo cuando se le llama. Entonces, la sintaxis básica para escribir funciones dentro de un Bash Script será
Sintaxis:
# for defining function_name(){ commands ..... } function_name # for calling
Además de esto, también podemos tener funciones con argumentos de paso y con valores de retorno. Ahora hablemos de ellos.
Funciones con argumentos de paso
Podemos agregar argumentos o parámetros a una función y pasar datos usándolos a la función para que la función pueda actuar con esos datos. En bash scripting, podemos usar la siguiente sintaxis para escribir una función con argumentos de paso.
Sintaxis de funciones con argumentos de paso:
#for defining function_name(){ ..... parameter_1 = $1 parameter_2 = $2 . . . parameter_n = $n .... commands ..... } #for calling function_name p1 p2 ....pn
Podemos pasar directamente los argumentos mientras llamamos a la función y podemos acceder a ellos con $1, $2….. $n dentro de la función. Veamos un ejemplo para una comprensión más clara del mismo.
Ejemplo de funciones con argumentos de paso:
#!/bin/bash add_two_num(){ local sum=$(($1+$2)) echo sum of $1 and $2 is $sum } add_two_num 2 3
Salida de funciones con argumentos de paso:
sum of 2 and 3 is 5
Arriba hay un script para sumar dos números. Aquí hemos proporcionado 2 y 3 como argumentos. Hemos accedido a ellos usando $1 y $2 de la función, calculamos su suma y la imprimimos en la terminal. A continuación se muestra la representación del shell del terminal después de ejecutar el script:
Funciones con valores de retorno
Una función produce un valor de retorno y lo devuelve al método de llamada después de que completa su ejecución. Se puede usar un valor de retorno para compartir el resultado producido o algún código de estado sobre si una función se ejecutó con éxito o no. En las secuencias de comandos de Bash, el valor de retorno se asigna al $? variable.
Un ejemplo de lo mismo se da a continuación:
Ejemplo de funciones con valores de retorno:
#!/bin/bash myfun(){ return 7 } myfun echo The return value is $?
Salida de funciones con valores de retorno:
The return value is 7
A continuación se muestra la salida del shell del terminal después de ejecutar el script:
Ahora, modifiquemos la suma anterior del script de dos números.
Código modificado:
#!/bin/bash myfun(){ return $(($1+$2)) } add_two_num 2 3 echo The sum is $?
Salida de código modificado:
The sum is 5
Ahora, el código anterior es un ejemplo del uso de ambos parámetros y el valor devuelto en una función de script Bash.
A continuación se muestra la representación del shell del terminal después de ejecutar el script:
Alcance variable
El alcance en un programa o script es una región donde las variables tienen su existencia. Si una variable se declara dentro de una función, generalmente es una variable local y si se declara fuera, entonces es una variable global. En el caso de un script bash, este concepto es un poco diferente, aquí cualquier variable, ya sea que esté escrita dentro o fuera de una función, por defecto es una variable global. Si queremos hacer una variable local, entonces necesitamos usar la palabra clave «local».
Es una buena práctica usar siempre una variable local dentro de una función para evitar confusiones innecesarias.
Un ejemplo de lo mismo se da a continuación:
Ejemplo de alcance variable:
#!/bin/bash var1="Apple" #global variable myfun(){ local var2="Banana" #local variable var3="Cherry" #global variable echo "The name of first fruit is $var1" echo "The name of second fruit is $var2" } myfun #calling function echo "The name of first fruit is $var1" #trying to access local variable echo "The name of second fruit is $var2" echo "The name of third fruit is $var3"
Salida de alcance variable:
The name of first fruit is Apple The name of second fruit is Banana The name of first fruit is Apple The name of second fruit is The name of third fruit is Cherry
Aquí, en este ejemplo anterior, var2 es una variable local, por lo que cuando accedemos desde la función funciona bien, pero cuando intentamos acceder fuera de la función, nos da un resultado vacío en la salida.
Por otro lado, a diferencia de los lenguajes de programación, aunque var3 se define dentro de una función, sigue actuando como una variable global y se puede acceder a ella fuera de la función. A continuación se muestra la representación del shell del terminal después de ejecutar el script:
Anular comandos
Es posible tener una función con el mismo nombre que el de un comando. Es útil si queremos ejecutar un comando con opciones específicas o queremos tener una edición personalizada del mismo.
Un ejemplo de lo mismo se da a continuación:
Ejemplo de anulación de comandos:
#!/bin/bash #overriding command echo(){ builtin echo "The name is : $1" } echo "Satyajit Ghosh"
Salida de comandos anulados:
The name is : Satyajit Ghosh
Aquí, en este ejemplo, hemos anulado el comando echo . Ahora, antes de imprimir la string dada, agrega la string con algunas palabras más y luego imprime. A continuación se muestra la representación del shell del terminal después de ejecutar el script:
Publicación traducida automáticamente
Artículo escrito por satyajit1910 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA