[Video] v20.20 Утилита bc. Математические операции с вещественными числами.

Сегодня я продолжу рассказ о утилитах которыми можно пользоваться для математических вычислений в коммандной оболочке.
В прошлом видео я рассказывал о утилите expr , но данная утилита не работает с дробными числами.

Real Numbers – Веще́ственное, или действи́тельное число (числа с дробной частью).

Сегодня я расскажу о утилите bc – возможно вам придётся установить из репозитория.
Данная утилита позволяет работать с вещественными числами.

Вот мой тестовый скрипт:

~/mytest.dir$ cat script4.sh
# this script is about calculations:
a=10.31
b=5.53
echo "a=$a"
echo "b=$b"
echo
c=`echo "scale = 2 ; $a + $b" | bc`
d=`echo "scale = 2 ; $a - $b" | bc`
e=`echo "scale = 2 ; $a * $b" | bc`
f=`echo "scale = 2 ; $a / $b" | bc`
echo "c=a+b= $a + $b = $c"
echo "d=a-b= $a - $b = $d"
echo "e=a*b= $a * $b = $e"
echo "f=a/b= $a / $b = $f"

Как видно из скрипта – утилита bc работает несколько иначе чем expr – ей нужно передавать данные, можно передавать данные указав на файл. Данная особенность сказывается на синтаксис, например, перед знаком умножения “*” не нужно ставить обратный слэш \.
Так же утилите необходимо указывать с какой точностью (сколько знаков после запятой) необходимо вычислять – это особенно актуально при операции деления (параметр, scale).

Давайте выполним скрипт:
~bash script4.sh
Результат:
a=10.31
b=5.53

c=a+b= 10.31 + 5.53 = 15.84
d=a-b= 10.31 - 5.53 = 4.78
e=a*b= 10.31 * 5.53 = 57.01
f=a/b= 10.31 / 5.53 = 1.86

Если изменить параметр scale то данных будет выводиться больше или меньше.

Это всё что я хотел сегодня рассказать о данной утилите.
Но утилита bc это целый программный язык. В нём очень много возможностей. Смотрите доп. инфо в man bc.
Дополнительную информацию смотрите в мануале.

На сегодня всё, спасибо за внимание, надеюсь вам понравилось.
Мне важен ваш отклик – пишите свои мысли в комментариях, подписывайтсь на канал, вступайте в мою группу в Вконтакте, ставьте большие пальцы вверх!
Удачи!

Sources:
man bc
How to get a decimal number when dividing in bc?
3
4