es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Suma de números n introducidos por el teclado en el script de bash.

Tengo que hacer un script que me pida números a través del teclado, los sume y muestre el total acumulado. El programa terminará cuando se introduzca un número negativo.

He hecho el siguiente script que funciona, pero no estoy convencido con el uso de “seq” en el “for” para utilizarlo como acumulador. No se me ha ocurrido hacerlo de otra manera.

¿Hay alguna manera de hacerlo más “elegante”? Edit: “Elegante” no es la palabra correcta, pero si lo que estoy haciendo es correcto en bash o si hay una manera de hacerlo de manera “normal” o “menos extraña”…

¡Gracias!

“`#!/bin/bash

<h1>suma acumulada de números</h1>

i=0
sum=0

while [[ true ]]; do
echo "Inserte un número:"
read num

if (($num < 0)); then
echo "Número negativo, saliendo…"
break
fi

for i in $(seq $num $num); do
sum=$(($i + $sum))
done

echo "La suma de los números previos es $sum"

done“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay varias formas de hacer que este script sea más eficiente y “normal” en Bash.

    1. Eliminar el bucle for y simplemente utilizar el operador de adición para sumar los números a la suma. Esto simplifica el código y lo hace más legible.
    #!/bin/bash
    #suma acumulada de números
    
    sum=0
    while true; do
        echo "Inserte un número: "
        read num
    
        if ((num < 0)); then
            echo "Número negativo, saliendo..."
            break
        fi
    
        sum=$((sum + num))
        echo "La suma de los números anteriores es $sum"
    done
    
    1. Utilizar un bucle hasta en lugar de un bucle while. Esto hace que el código sea más conciso y fácil de leer.
    #!/bin/bash
    #suma acumulada de números
    
    sum=0
    until ((num < 0)); do
        echo "Inserte un número: "
        read num
    
        ((num < 0)) && break
    
        sum=$((sum + num))
        echo "La suma de los números anteriores es $sum"
    done
    
    echo "Número negativo, saliendo..."
    
    1. Utilizar una función para calcular la suma. Esto hace que el código sea más modular y más fácil de probar.
    #!/bin/bash
    #suma acumulada de números
    
    sum=0
    
    calcular_suma() {
        local num=$1
        sum=$((sum + num))
        echo "La suma de los números anteriores es $sum"
    }
    
    while true; do
        echo "Inserte un número: "
        read num
    
        if ((num < 0)); then
            echo "Número negativo, saliendo..."
            break
        fi
    
        calcular_suma $num
    done
    

    En general, las principales mejoras son simplificar el código eliminando bucles innecesarios y utilizar las diferentes construcciones condicionales disponibles en Bash (p.ej. bucles hasta).

Comments are closed.