Tutoriales

Cómo hacer que una función Bash devuelva un valor

Si tienes experiencia previa en programación y eres nuevo en Bash, es posible que notes algo un poco extraño.

A diferencia de otros lenguajes de programación, las funciones en bash no devuelven ningún valor. En cambio, devuelve un estado de salida o un valor numérico que indica éxito o fracaso.

Pero la pregunta aquí es cómo hacer que una función en bash devuelva un valor.

Por supuesto, si estuviera escribiendo este tutorial, tendría que tener una solución (leer solución alternativa) para resolver este problema, pero antes de eso, comprendamos el problema.

Problemas que estamos tratando

Primero, les comparto un programa C simple para explicar cómo el lenguaje de programación devuelve valores a través de funciones bash:

#include 

// Function declaration with return type int
int add(int x, int y) {
    return x + y;
}

int main() {
    // Call the function and store the result in a variable
    int result = add(3, 4);

    // Print the result
    printf("%d\n", result);

    return 0;
}

Si ejecuta el programa C anterior, volverá 7 como muestra la imagen:

Cómo devolver un valor de una función en un programa C

En el programa C anterior, creé un programa llamado add Acepta dos valores y suma los dos valores mediante la declaración de devolución.

Desafortunadamente, las funciones en bash no funcionan así, dan el estado de salida del último comando utilizado en la función, que puede ser 0 (éxito) o distinto de cero (fracaso).

Para saber la salida de bash, hay una variable especial en bash $? Comprender el estado de salida. Permítanme compartirles rápidamente cómo usarlo:

#!/bin/bash

# Defining the function
function test {
  echo "A demo function created to check the exit status"
}

# Calling function
test

# Checking the status
echo "The exit status of the test is: $?"
Verificar el estado de salida en bash

Como puedes ver, regresa. ¡Indica que la función se ejecutó exitosamente!

Ahora, veamos cómo hacer que una función bash devuelva un valor.

Cómo hacer que una función bash devuelva un valor

Hay dos formas de hacer que una función bash devuelva un valor:

  • Utilice el flujo de salida estándar (que implica el uso de comandos de eco o impresión)
  • Usar variables globales

Por supuesto, no es lo mismo que los valores de retorno en C u otros lenguajes de programación, pero puede resultar útil en muchas situaciones.

Así que comencemos con el primero.

Método 1: utilizar el flujo de datos de salida estándar

Si no conoce los flujos de datos, existen 3 tipos de flujos de datos en Linux: entrada, salida y error. Cada uno se utiliza para diferentes tareas.

Como sugiere el título, en este método usaré el comando echo o printf para usar el flujo de salida estándar.

¿Sigo confundido? En resumen, canalizaré la salida de la función al flujo de salida estándar para imprimir la salida (así es como se usan los comandos printf o echo).

Primero comparte un script bash:

#!/bin/bash

# Function definition
function demo {
  local namaste="Namaste from Bash!"
  echo "${namaste}"
}

# Call the function and capture its output
output=$(demo)

# Print the captured output
echo "${output}"  

Cuando se ejecute, dará el siguiente resultado:

Usar el flujo de salida estándar para hacer que las funciones bash devuelvan valores

Ahora, vayamos a la parte de explicación.

Primero, creé una función demo Hay una variable local en él. namaste Contiene la cadena que quiero imprimir.

Más tarde, utilicé el comando echo para imprimir los datos del interior. namaste Cambiando.

En la siguiente parte, llamé a la función dentro $() concepto de implementación demo Función en subcapa, salida por output Cambiando.

Finalmente, imprima la salida capturada usando el comando echo ouptut Cambiando.

Bastante fácil. ¿correcto?

Método 2: utilizar variables globales

Por defecto, cada variable en bash es una variable global, para usar variables locales debes usar el término local antes de asignarle ningún valor.

Pero la pregunta es cómo usar variables globales para devolver valores en funciones bash. Bueno, déjame mostrarte un script bash simple que usa variables globales para lograr esto:

#!/bin/bash

# Global variable to store the result
output=""

# Function definition
function generate_greeting {
  local name=$1  # Function parameter

  # Assign the greeting to the global variable
  output="Hello, ${name}!"
}

# Call the function with a name as an argument
generate_greeting "$USER"

# Access the global variable
echo "${output}"

El script anterior simplemente saluda al usuario que ha iniciado sesión actualmente. Cuando ejecuta el script anterior, puede esperar el siguiente resultado:

Usar variables globales para hacer que las funciones bash devuelvan valores

Ahora, analicemos el guión.

1. Variables globales vacías output fue anunciado.

Entonces la función se llama generate_greeting Se requiere un parámetro al crear name En la siguiente línea se asigna el texto de saludo con el nombre de usuario a output Cambiando.

A continuación, el script llamará a la función. generate_meeting y $USER Parámetro para obtener el nombre del usuario actualmente conectado.

Finalmente, use el comando echo para ver el valor de la variable global. output fue impreso.

Sí, eso es todo lo que se necesita para usar variables globales en bash para hacer que una función devuelva un valor.

¿Qué método utilizar? (en mi opinión)

Personalmente, no me gusta la idea de usar variables globales para que las funciones bash devuelvan valores, por una simple razón.

Básicamente, se puede acceder a las variables globales y modificarlas en cualquier parte del script, lo que puede causar problemas, especialmente si el script es complejo y los usuarios pueden cambiarlo mientras tanto.

Por eso recomiendo utilizar el primer método, que utiliza el flujo de salida estándar.

Espero que encuentres útil esta guía.

¿Nuevo en las secuencias de comandos bash? Empieza aquí 👇

Aprenda las secuencias de comandos Bash [Free Hands-on Tutorial Series]

Aprenda los conceptos básicos de las secuencias de comandos de shell Bash en esta serie de tutoriales. Siga los ejemplos y resuelva desafíos de secuencias de comandos para mejorar sus conocimientos.

LEER  Antivirus para Kubernetes Kali Linux Tutoriales

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba