Библиотека сайта rus-linux.net
Пишем собственный калькулятор в виде скрипта командной оболочки
Оригинал: How to make your own calculator using shell script in LinuxАвтор: sachit
Дата публикации: 25 января 2012 года
Перевод: А. Кривошей
Дата публикации перевода: 26 января 2013 г.
Скрипты оболочки - это основа мощи Linux. С их помощью мы можем делать самые разные вещи. Если вы до этого никогда не имели дело со скриптами, и первое, что вы увидели - это руководство, я рекомендую вам сначала немного изучить основы скриптов, чтобы понимать, о чем будет идти речь. В этом руководстве мы собираемся написать простой калькулятор, который будет выполнять простые математические операции: сложение, вычитание, умножение и деление. Для этого мы задействуем оператор операторы select и case, а также команду expr. Оператор select поможет нам создать меню. Помните, что оператор select работает только в командной оболочке Korn(ksh). Оператор case поможет нам создать структуру скрипта, а команда expr обеспечит выполнение математических вычислений.
Создание меню
Для начала создадим меню, используя оператор select.
echo "------------" echo "Calculator" echo "------------" PS3="Press 1 for Addition, 2 for subtraction, 3 for multiplication and 4 for division: " select math in Addition Subtraction Multiplication Division do break done
Здесь создается меню, и пользователя будут запрашивать, какую операцию он хочет выполнить: сложение, вычитание, умножение или деление. Выглядеть это будет следующим образом:
Теперь добавим блок кода между do и done, использующий оператор case для реализации полнофункционального калькулятора.
Готовый калькулятор:
Мы создали меню, а теперь добавим операции сложения, вычитания, умножения и деления. После того, как пользователь посчитает то, что он хотел, его необходимо спросить, не хочет ли он еще что-нибудь вычислить. Если хочет, мы должны вернуться к началу. Для этого мы используем цикл while.
input="yes" while [[ $input = "yes" ]] do echo "------------" echo "Calculator" echo "------------" PS3="Press 1 for Addition, 2 for subtraction, 3 for multiplication and 4 for division: " select math in Addition Subtraction Multiplication Division do case "$math" in Addition) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=`expr $num1 + $num2` echo Answer: $result break ;; Subtraction) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=`expr $num1 - $num2` echo Answer: $result break ;; Multiplication) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=`expr $num1 * $num2` echo Answer: $result break ;; Division) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=$(expr "scale=2; $num1/$num2" | bc) echo Answer = $result break ;; *) echo Choose 1 to 4 only!!!! break ;; esac done echo "Do you want to calculate again(yes/no):" read input echo "Thank you for using this program" done
Мы использовали цикл while, создали меню, выполнили некоторые математические вычисления. В коде умножения:
result=`expr $num1 * $num2`
используются кавычки (``), так как * является ключевым словом в скриптах оболочки, и она не воспринимает * как знак умножения. Таким образом, чтобы дать понять скрипту, что мы используем * для умножения, используются кавычки.
Аналогично для кода деления:
result=$(expr "scale=2; $num1/$num2" | bc)
Обратите внимание, что скрипт оболочки игнорирует дробную часть при делении. Например, если мы разделим 10 на 8, ответ будет 1, а остальное будет отброшено. Но, так как мы хотим видеть полный ответ, мы используем для этого утилиту bc. Информацию о ней можно найти на man-странице. Значение scale=2 показывает, что мы хотим получить ответ с точностью до второго знака после запятой. Теперь наш калькулятор выглядит так:
Вы также можете добавить в калькулятор возведение в степень или вычисления по модулю. Скопируйте код и поиграйте с ним.