Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com




Библиотека сайта 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 показывает, что мы хотим получить ответ с точностью до второго знака после запятой. Теперь наш калькулятор выглядит так:

калькулятор

Вы также можете добавить в калькулятор возведение в степень или вычисления по модулю. Скопируйте код и поиграйте с ним.

Если вам понравилась статья, поделитесь ею с друзьями: