Математика в BASH с помощью bc

1 minute read

bc - это язык, который поддерживает числа произвольной точности с интерактивным исполнения отчетности.
Безусловно, bc - один из аутсайдеров, когда дело доходит до расчетов по командной строке.

Главным достоинством bc является обработка чисел с запятой (float). В среде bash можно проводить обычные операции (сложение, вычитание, деление и умножение) с целыми числами, но без bc не обойтись, когда дело доходит до десятичных дробей.

Дальше приводится несколько примеров использования bc:

Использование bc для базовых операций:

bc <<< 3-2  
bc <<< 5*2  
bc <<< 9/3

как всегда, можно использовать echo + |:

echo `3*2` |bc  
echo `3-2` |bc  
echo `3*2` |bc  
echo `3/2` |bc

bc, как положено, соблюдает приоритетность математических операций. Проверьте:

echo `2 + 2 * 2` |bc

Округление результата

В случае выполнения операции деления из примера bc вернет 1. Для того что бы показать цифры после запятой нужно указать сколько их нужно с помощью scale (по умолчанию = 0):

echo `scale=1;3/2` |bc

Если же у Вас есть файл с набором математических операций

воспользуйтесь слудющей конструкцией:

bc < FileName

Использование результата последней операции:

echo `2 + 2;last * 2` |bc

Вместо last можно использовать точку:

echo `2 + 2;. * 2` |bc

Получение квадратного корня и возведение в степень
sqrt вернет квадратный корень из числа. Если результат является десятичной дробью - используйте scale для отображения знаков после запятой.

echo `sqrt(16)` | bc

Довольно странно, что у библиотеки, написанной на C не предусмотрено использование sqr, но все же его нету.

Пример возведения в степень:

echo `4^2` | bc

Тригонометрические функции:

Сомневаюсь, что кто-то будет в скриптах использовать значение косинуса или натурального логарифма числа, но все же:

  • s (x) Синус x. x задается в радианах.
  • c (x) Косинус x. x задается в радианах.
  • l (x) Натуральный логарифм x

Создание переменных на основе результатов вычислений:

var1=$(echo `sqrt(16)` | bc)
var2=$(bc <<< "2 + 2 * 2")
echo $var1 + $var2 |bc

В этой статье bc используется для определения места, которое занимают базы даных mysql.

Статьи на английском языке:
mylinuxbook.com
basicallytech.com