Bucle en linux

Teniendo este ejercicio en linux, ¿dónde hago para que realice la calculadora hasta que ya no quiera más?
#!/bin/bash
Echo "introduce num1"
Read a
Echo "introduce num2"
Read b
echo "que operacion quiere hacer (suma, resta, producto, division)?"
Read o
function suma(){
let c=$a+$b
echo "la suma es: $c"
}
function resta(){
let c=$a-$b
echo "la resta es: $c"
}
function producto(){
let c=$a*$b
echo "el producto es: $c"
}
function dividir(){
let c=$a/$b
echo "la división es: $c"
}
if [ $o = "suma" ]
Then
Suma
Fi
if [ $o = "resta" ]
Then
Resta
Fi
if [ $o = "producto" ]
Then
Producto
Fi
if [ $o = "division" ]
Then
Dividir
Fi

1 Respuesta

Respuesta
1
Una posible solución es crear un bucle infinito con un while, de manera que se ejecutará siempre, hasta que preguntemos al usuario si quiere seguir usando la calculadora o no, que entonces podremos salir del bucle con el break, te dejo el código:
#!/bin/bash
while true ; do
        Echo "introduce num1"
        Read a
        Echo "introduce num2"
        Read b
echo "que operacion quiere hacer (suma, resta, producto, division)?"
        Read o
        function suma(){
                let c=$a+$b
                echo "la suma es: $c"
        }
        function resta(){
                let c=$a-$b
                echo "la resta es: $c"
        }
        function producto(){
                let c=$a*$b
                echo "el producto es: $c"
        }
        function dividir(){
                let c=$a/$b
                echo "la divisisn es: $c"
        }
        if [ $o = "suma" ];then
                Suma
        Fi
        if [ $o = "resta" ];then
                Resta
        Fi
        if [ $o = "producto" ];then
                Producto
        Fi
        if [ $o = "division" ];then
                Dividir
        Fi
        Echo "Pulse enter para otra operacisn o \"salir\" para cerrar la calculadora."
        Read salir
        if [ $salir=="salir" ]; then
                break
        Fi
        Clear
Done
Gracias por responder tan rápido, necesito ver todavía que eso funcione, pero, tal como lo he leído.. ¿no te parece que es aplicarle poca lógica estructurada usando un bucle infinito aunque funcione?. Gracias por todo
Evidentemente se puede hacer con un bucle while sin que tenga que ser infinito, cambiando el while, creo que este te resultará más correcto:
#!/bin/bash
salir="n"
clear
while [ "$salir" != "salir" ] ; do
        echo "introduce num1"
        read a
        echo "introduce num2"
        read b
        echo "que operacion quiere hacer (suma, resta, producto,division)?"
        read o
        function suma(){
                let c=$a+$b
                echo "la suma es: $c"
        }
        function resta(){
                let c=$a-$b
                echo "la resta es: $c"
        }
        function producto(){
                let c=$a*$b
                echo "el producto es: $c"
        }
        function dividir(){
                let c=$a/$b
                echo "la divisisn es: $c"
        }
        if [ $o = "suma" ];then
                Suma
        Fi
        if [ $o = "resta" ];then
                Resta
        Fi
        if [ $o = "producto" ];then
                Producto
        Fi
        if [ $o = "division" ];then
                Dividir
        Fi
        Echo "Pulse enter para otra operacisn o \"salir\" para cerrar la calculadora."
        Read salir
Done
Revisando el código, si bien el while te parece muy feo, siempre puedes optar a usar una función recursiva, una función que cuando te pregunte si quieres salir, si le contestas que no, se llame a ella misma de nuevo:
#!/bin/bash
        function suma(){
                let c=$a+$b
                echo "la suma es: $c"
        }
        function resta(){
                let c=$a-$b
                echo "la resta es: $c"
        }
        function producto(){
                let c=$a*$b
                echo "el producto es: $c"
        }
        function dividir(){
                let c=$a/$b
                echo "la divisisn es: $c"
        }
function calculadora(){
        Clear
        Echo "introduce num1"
        Read a
        Echo "introduce num2"
        Read b
echo "que operacion quiere hacer (suma, resta, producto, division)?"
        Read o
        if [ $o = "suma" ];then
                Suma
        Fi
        if [ $o = "resta" ];then
                Resta
        Fi
        if [ $o = "producto" ];then
                Producto
        Fi
        if [ $o = "division" ];then
                Dividir
        Fi
        Echo "Pulse enter para otra operación o \"salir\" para cerrar la calculadora."
        Read salir
        if [ ! "$salir" = "salir" ];then
                Calculadora
        Fi
}
Calculadora
Aunque funciona genial. No comprendo para que la última llamada a calculadora
Lo que hemos hecho es meter el código de la calculadora en una función, lo que permite hacer esto es que puede ser llamada desde cualquier parte del código (incluso dentro de la propia función). Al introducirlo dentro de una función se tendrá que llamar de alguna manera, si quitaras esa linea, lo único que harías es un script que declara unas funciones, pero como no llama a ninguna, no muestra nada por pantalla.
Una buena forma de ver que hace un script es ejecutándolo en modo debug:
Bash -x script. Sh

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas