Калькулятор на bash
Имею такой код калькулятора на bash.
Вычитание (-), сложение (+) и деление (/) работают нормально, но умножение не работает (мне нужно сделать, чтобы умножение было как x или X, то есть ./kalk 3 x 4). В чем ошибка, что исправить?
Как мне сделать, чтобы скрипт работал не 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
Ответы (1 шт):
Автор решения: Ivan
→ Ссылка
Используйте весь список аргументов как параметры для 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