🐧 Выполнение вычислений в командной строке с помощью инструмента bc и оболочки

Как считать в шелле

by itisgood

Давайте рассмотрим, как можно складывать, вычитать, умножать и делить числа, не покидая терминала.

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

Обычно для этого  используют инструмент bc, но в вашей оболочке также есть несколько способов выполнить основные вычисления.

см. также:

Как использовать GNU bc (базовый калькулятор) в Linux

Shell скрипт

Вот пара примеров с использованием $(( … )), который соответствует POSIX, вы можете использовать let или expr, но они менее переносимы:

$ echo $(( 2 + 2 ))
4

$ echo $(( 3 * 3 ))
9

$ echo $(( 4 % 3 ))
1

$ value=$(( 5 - 3 )) && echo $(( value += 1 ))
3

В случае, когда требуется работать с десятичными числами, это не работает.

Например, в sh или bash:

$ echo $(( 2 * 2.25 ))
bash: 2 * 2.25 : syntax error: invalid arithmetic operator (error token is ".25 ")

Обратите внимание, если вы используете zsh, то вышеописанное будет работать, потому что он обрабатывает десятичные числа.

Инструмент bc

На многих системах bc установлен по умолчанию, но если это не так, вы можете установить его с помощью выбранного вами менеджера пакетов, например apt-get install bc, вот несколько примеров:

$ bc <<< "2 + 3 - 4"
1

$ bc <<< 2+3-4
1

$ bc <<< "4 % 3"
1

$ value="$(bc <<< "3 * 5")" && echo "${value}"
15

$ bc <<< 1/4
0

$ bc -l <<< 1/4
.25000000000000000000

$ bc <<< "scale=3; 1/4"
.250
Добавив флаг -l, вы настроите bc на работу с десятичными числами, которые по умолчанию имеют 20 знаков после запятой.
В качестве альтернативы вы можете задать scale=x, где x – количество десятичных знаков.
Если вы не зададите ни одну из этих опций, то округление будет производиться до 0 знаков после запятой.
Инструмент bc может делать гораздо больше, я рекомендую пролистать man bc для получения более подробной информации, но если вам нужно сделать несколько базовых математических вычислений в командной строке, это довольно удобно.
см. также:

You may also like

Leave a Comment