Команда Linux bc
(Basic Calculator) — утилита командной строки, действующая как научный калькулятор с выполнением математических вычислений произвольной точности.
Содержание
Установка
Команда bc
вероятнее всего в вашем дистрибутиве отсутствует. Устанавливается она очень просто.
В Ubuntu:
$ sudo apt install bc
В Arch Linux:
$ yay -S bc
Синтаксис
bc [опции] [файл]
Опции
- -i --interactive
- Включить интерактивный режим
- -l --mathlib
- Определение математической библиотеки перед обработкой файлов
- -q --quiet
- Запуск команды без вывода приветствия GNU
- -s --standard
- Нестандартные конструкции команды являются ошибками
- -w --warn
- Предупреждать о нестандартных конструкциях команды
Хотя команда работает с произвольной точностью, по умолчанию команда использует ноль цифр после запятой, если только не указан флаг -l
или не задана переменная scale
.
Принцип работы утилиты
Команда bc
работает, обрабатывая код из всех файлов, указанных в командной строке, в том порядке, в котором файлы перечислены. После обработки файлов утилита начинает чтение со стандартного ввода, выполняя весь код по мере его чтения. Команда не читается из стандартного ввода, если файл содержит команду для остановки процессора.
При указании входных файлов убедитесь, что это текстовые файлы, содержащие последовательность команд, операторов или определений функций, которые могут быть прочитаны и выполнены командой. Команда позволяет пользователям определить математическую библиотеку перед обработкой файлов с помощью параметра -l
.
Хотя команда bc
работает с произвольной точностью, по умолчанию команда использует ноль цифр после запятой, если только не указана опция -l
или переменная scale
не задана вручную. Флаг -l
устанавливает переменную scale
на 20 знаков после запятой.
При работе с входными значениями утилита позволяет пользователям указывать базу ввода и вывода для математических операций с десятичными, восьмеричными или шестнадцатеричными значениями. Пользователи также могут работать с переменными или преобразовывать значения. Значение по умолчанию — десятичное, а также доступно масштабирование для обозначения десятичной точки.
Команда bc
поддерживает большинство стандартных выражений, таких как +
, -
, /
, *
, %
, ^
, а также:
- Арифметические операторы
- Операции увеличения и уменьшения
- Операторы присваивания
- Сравнение и реляционные операции
- Логические и логические операции
- Математические функции
- Условные утверждения
- Повторяющиеся утверждения
- C-подобные комментарии, которые начинаются
/*
и заканчиваются на*/
Некоторые поддерживаемые основные и специальные выражения:
- length (expression)
- Значение функции длины — это количество значащих цифр в выражении
- read ( )
- Функция
read
считывает число со стандартного ввода, независимо от того, где происходит функция (используйте с осторожностью, так как это может вызвать проблемы из-за смешивания данных и программы в стандартном вводе) - scale (expression)
- Количество цифр после запятой в выражении представляет собой значение функции
scale
- sqrt (expression)
- Квадратный корень выражения является значением функции
sqrt
- ++ var
- Увеличивает переменную на единицу, а новое значение является результатом выражения
- var ++
- Результатом выражения является значение переменной, и затем переменная увеличивается на единицу
- -- var
- Уменьшает переменную на единицу, а затем сохраняет новое значение переменной
- var --
- Результатом выражения является значение переменной, а затем переменная уменьшается на единицу
- ( expr )
- Скобка изменяет стандартный приоритет и принудительно оценивает выражение
- var = expr
- Переменной
var
присваивается значение выражения
Использование команды bc в Linux
Интерактивный режим
Для входа в интерактивный режим достаточно вызвать команду без указания файлов:
oleg@mobile:~:$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
Команда переходит в интерактивный режим и ожидает ввода.
По умолчанию утилита принимает нулевые цифры после десятичной точки. В качестве примера выполняем деление 1/3
:
oleg@mobile:~:$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1/3
0
Вы можете установить масштаб по умолчанию до 20 после десятичной точки и также определить стандартную математическую библиотеку. Для этого команда запускается с опцией -l
. В качестве примера выполняем деление 1/3
:
oleg@mobile:~:$ bc -l
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1/3
.33333333333333333333
По окончании вычислений выйдите из интерактивной оболочки, нажав Ctrl + D или выполнив:
oleg@mobile:~:$ quit
Использование в качестве калькулятора
Команда bc
может действовать как калькулятор на основе интерфейса командной строки для простых математических операций: сложение, вычитание, деление и умножение. Поддерживаются также и различные расширенные математические функции: синус, косинус, тангенс, натуральные логарифмы.
Запускаем команду и проверяем некоторые математические операции:
oleg@mobile:~:$ bc
bc 1.07.1
...
22+47
69
12*8
96
Десятичные дроби
При работе с десятичными знаками команда по умолчанию использует ноль цифр после запятой. Однако можно настроить её поведение, определив значение переменной scale
, либо указав опцию -l
при выполнении команды.
Для примера делим 10/3
без установки переменной scale
, а затем установив значение scale = 2
:
oleg@mobile:~:$ bc
...
10/3
3
scale =2
10/3
3.33
В первом случае цифры после десятичной точки не были показаны, а во втором — сохранены два десятичных разряда.
Ввод из команды echo
Повторяем предыдущее вычисление с тем же значением переменной:
oleg@mobile:~:$ echo "scale=2;10/3" | bc
3.33
oleg@mobile:~:$
Преобразование десятичного числа в двоичное
Для примера преобразуем десятичное число 10
в двоичное, используя команду echo
и переменную obase
:
oleg@mobile:~:$ echo 'obase=2;10' | bc
1010
oleg@mobile:~:$
Вычисление из файла
Создадим простой текстовый файл calc.txt
со следующим содержимым:
oleg@mobile:~:$ cat calc.txt
10/3
12+7
25*3
47-14
oleg@mobile:~:$
Передаём содержимое файла команде bc
с опцией -l
для увеличения точности вычислений:
oleg@mobile:~:$ bc -l calc.txt
...
3.33333333333333333333
19
75
33
Заключение
Здесь были представлены простейшие примеры использования в Linux команды bc
для математических вычислений. Это лишь малая толика того, что может выполнять эта утилита.