Калькулятор на bash

Рейтинг: 0Ответов: 1Опубликовано: 12.01.2023

Имею такой код калькулятора на bash.

  1. Вычитание (-), сложение (+) и деление (/) работают нормально, но умножение не работает (мне нужно сделать, чтобы умножение было как x или X, то есть ./kalk 3 x 4). В чем ошибка, что исправить?

  2. Как мне сделать, чтобы скрипт работал не 3 параметрами, а с неограниченным кол-вом? (Например, ./kalk 2 + 3 + 4 * 5 / 7 и тд)

#!/bin/bash
 
if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
        echo "Пусто."
        exit
fi
case "$2" in
        "/")
                if (( $(bc <<<"$3 == 0") )); then
                        echo "Деление на 0!"
                        exit
                fi
                ;&
        [+%*-])
                result=$(bc<<<"scale=6;$1 $2 $3")
        echo "Результат: $result"
                ;;
        *)
                echo error
esac

Ответы

▲ 3

Используйте весь список аргументов как параметры для bc:

cat test
#!/bin/bash
bc -l <<< "$@"

$ ./test 2 + 3 + 4 \* 5 / 7
7.85714285714285714285

$ ./test '2 + 3 + 4 * 5 / 7'
7.85714285714285714285

Деление на 0 bc обработает сам:

$ ./test 2 + 3 + 4 \* 5 / 0
Runtime error (func=(main), adr=16): Divide by zero