Команда bc в Linux

Опубликовано admin - вт, 03/21/2023 - 11:08

Команда Linux bc (Basic Calculator) — утилита командной строки, действующая как научный калькулятор с выполнением математических вычислений произвольной точности.

Примеры использования команды bc в Linux

Содержание

Установка

Команда 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 для математических вычислений. Это лишь малая толика того, что может выполнять эта утилита.

Поделиться с друзьями