Bash Scripting – Funciones

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:

Output of Functions with Passing Arguments

 

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:

Output of Functions with Return Values

 

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:

Output of Modified Code

 

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:

Output of Variable Scope

 

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:

Output of Overriding Commands

 

Publicación traducida automáticamente

Artículo escrito por satyajit1910 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *