Библиотека сайта rus-linux.net
GNU bc - калькулятор командной строки для Linux
Оригинал: What is a good command-line calculator on Linux
Автор: Dan Nanni
Дата публикации: 21 октября 2014 года
Перевод: А. Кривошей
Дата перевода: октябрь 2015 г.
Любой современный дистрибутив Linux включает графический калькулятор. С другой стороны, если вашим обычным рабочим окружением является терминал, то вы скорее будете искать себе калькулятор, который бы работал в командной строке. В этой категории программ, по моему мнению, единоличным лидером является GNU bc (сокращение от "basic calculator"). Это очень мощная и полезная утилита.
Еще до наступления эры GNU, bc исторически был известным языком для вычислений, первая реализация которого относится к старым добрым временам Unix 70-х годов. Изначально bc был больше известен в качестве языка программирования с синтаксисом, похожим на C. Со временем оригинальный bc эволюционировал в POSIX bc, а затем и в GNU bc.
Возможности GNU bc
Сегодняшний GNU bc является результатом многочисленных усовершенствований предыдущих реализаций, и сегодня он представляет собой стандарт для всех главных дистрибутивов GNU/Linux. bc поддерживает стандартные арифметические операции с числами произвольной точности и различных систем счисления (двоичные, десятеричные, шестнадцатеричные).
Если вы знакомы с языком C, вы увидите, что в bc используются те же или похожие математические операторы. Среди поддерживаемых операций арифметические (+,-,*,/,%,++,--), сравнения (<,>,==,!=,<=,>=), логические (!,&&,||), побитовые (&,|,^,~,<,>>), составного присваивания (+=,-=,*=,/=,%=,&=,|=,^=,&&=,||=,<=,>>=). bc имеет много полезных встроенных функций, таких как извлечение квадратного корня, тригонометрические и обратные тригонометрические функции, логарифмы, экспонента и так далее.
Использование GNU bc
Возможности GNU bc как калькулятора командной строки практически неограничены. В этом руководстве я собираюсь описать самые популярные функции bc. Получить полную информацию о возможностях программы можно из официальной документации.
За исключением случая запуска ранее написанного скрипта, обычно bc используется в интерактивном режиме, где каждая строка, содержащая выражение или оператор, интерпретируется и выполняется на лету. Чтобы перейти в интерактивную сессию bc, введите приведенную ниже команду. Для выхода из сессии введите "quit" и нажмите Enter.
$ bc
Во всех приведенных в данном руководстве примерах подразумевается, что они вводятся внутри сессии bc.
Типы выражений
Для расчета арифметического выражения просто введите выражение и нажмите Enter. Если хотите, можете сохранить промежуточный вариант в переменной, чтобы затем использовать его в других выражениях.
В пределах одной сессии bc сохраняет всю историю введенных строк. Для возврата к предыдущим выражениям используется курсорная клавиша со стрелкой вверх. Если вы хотите ограничить число строк, сохраняемых в истории, присвойте нужное вам число переменной по имени history. По умолчанию ее значение -1, что соответствует "unlimited".
Переключение между системами счисления ввода/вывода
Часто может потребоваться вводить числа и выводить на экран результаты в двоичном или шестнадцатеричном формате. Для этого bc позволяет определить систему счисления для ввода и вывода. Они хранятся в переменных ibase и obase соответственно. По умолчанию значение этих специальных переменных равно 10, а диапазон допустимых значений от 2 до 16 (или значения переменной окружения BC_BASE_MAX в случае obase). Все, что вам нужно для смены системы счисления - изменить значения ibase и obase. Например, ниже пример суммирования двух шестнадцатеричных/двоичных чисел:
Обратите внимание, что я задал сначала obase=16, затем ibase=16, а не наоборот. Если бы задал сначала ibase=16, то выражение obase=16 интерпретировалось бы уже в шестнадцатеричном формате (то есть мы присваивали бы obase значение 22 в десятеричной форме).
Точность
В bc точность чисел хранится в специальной переменной под названием scale (количество десятичных цифр после точки). По умолчанию ее значение равно 0, что соответствует хранению всех цифр результата. Вы можете изменить точность, присвоив перменной scale соответствующее значение.
scale=4
Использование встроенных функций
Помимо простых арифметических операций GNU bc предлагает большой набор продвинутых математических функций, как встроенных, так и находящихся во внешней математической библиотеке. Для использования этих функций запустите bc с опцией "-l".
Ниже проиллюстрированы некоторые из этих встроенных функций.
Квадратный корень из N:
sqrt(N)
Синус от X (X в радианах):
s(X)
Косинус от X (X в радианах):
c(X)
Арктангенс от X (возвращаемое значение в радианах):
a(X)
Натуральный логарифм от X:
l(X)
Экспонента от X:
e(X)
Другие возможности языка
GNU bc поддерживает простые операторы (например присваивание значения переменной, break, return), составные операторы (if, while, for loop), и функции, определенные пользователем. Я не буду детально описывать эти возможности, но вы легко можете научиться пользоваться ними из официального руководства. Ниже пример определения очень простой функции:
define dummy(x){ return(x * x); } dummy(9) 81 dummy(4) 16
Неинтерактивное использование GNU bc
До сих пор мы использовали bc в интерактивном режиме. Однако достаточно часто он используется неинтерактивно, в скриптах оболочки. В этом случае вы можете направить ввод на bc с помощью команды echo, например:
$ echo "40*5" | bc $ echo "scale=4; 10/3" | bc $ echo "obase=16; ibase=2; 11101101101100010" | bc
В завершение можно сказать, что GNU bc - это очень мощный гибкий калькулятор командной строки, который соответствует самым высоким требованиям. Предустановленный во всех современных дистрибутивах Linux, bc может значительно упростить ваши задачи, не выходя из терминала.