ProIT: медіа для профі в IT
3 хв.

Лайфхаки: корисні команди для числових операцій у Linux

author avatar ProIT NEWS

Системи Linux пропонують численні способи роботи з числами в командному рядку – від виконання обчислень до використання команд, які генерують діапазон чисел. NetworkWorld детально описує деякі корисні команди та їхню роботу.

Команда expr

Однією з найпопулярніших команд для виконання обчислень у Linux є expr. Ця команда дає змогу використовувати вікно терміналу як калькулятор і писати сценарії, які включають обчислення різних типів. Ось кілька прикладів:

$ expr 10 + 11 + 12
33
$ expr 99 - 102
-3
$ expr 7 \* 21
147

Зауважте, що символ множення * у наведеній вище команді потребує зворотної похилої риски, щоб гарантувати, що символ не тлумачиться як символ підстановки. Ось ще кілька прикладів:

$ expr 147 / 7
21
$ expr 81 % 10
1

Наведені вище два обчислення виконують ділення й отримують модуль (число, що залишається після 81, ділиться на 10).

Використання подвійних дужок

Ви також можете виконувати багато обчислень, використовуючи подвійні дужки. Ось приклад:

$ sum=$(( 1 + 10 ))
$ echo $sum
11

Інші обчислення з використанням подвійних дужок (множення, віднімання, ділення та модуля) наведено нижче.

$ num=$(( 3 * 17 ))
$ echo $num
51
$ num=$(( 124 - 37 ))
$ echo $num
87
$ num=$(( 124 / 37 ))
$ echo $num
3
$ num=$(( 124 % 37 ))
$ echo $num
13

Крім того, можна комбінувати круглі дужки та команди expr таким чином:

$ num=5
$ num=$(expr $num + 11)
$ echo $num
16

До того ж можна використовувати такі зворотні галочки:

$ num=5
$ num=`expr $num + 11`
$ echo $num
16

Використання bc

Команда bc надає точний калькулятор, який дає змогу виконувати обчислення та навіть вказувати кількість знаків після коми, які ви хочете бачити, якщо результати не є цілими числами.

$ echo "26/3" | bc
8
$ echo "scale=3;26/3" | bc
8.666

Крім того, можна обчислити факторіали за допомогою команд, подібних до наведеної нижче.

На всяк випадок, якщо ви не думали про факторіали багато років, вони передбачають множення всіх цілих чисел від вибраного числа до одиниці. Наприклад, 3! (факторіал 3) буде 6 (3 x 2 x 1).

Команда нижче обчислює значення 10!, використовуючи команду seq для створення списку чисел (10 9 8 тощо), а потім передаючи їх до bc для виконання множення.

$ seq -s "*" 1 10 | bc
3628800
$ expr 10 \* 9 \* 8 \* 7 \* 6 \* 5 \* 4 \* 3 \* 2 \* 1
3628800

Використання awk

Навіть awk може допомогти з математикою. Ось два приклади команд, які можна спробувати в командному рядку:

$ awk 'BEGIN { a = 76; b = 42; print "(a + b) =", (a + b) }' (a + b) = 118
$ echo 66 77 90 | awk '{ sum = $1 + $2 + $3 ; avg = sum /3; print avg }' 77.6667

Використання команди factor

Команда factor використовується для друку простих множників заданих чисел. Ось приклад, у якому число 111 розкладено на множники:

$ factor 111
111: 3 37

Як бачите, два множники для числа 111 – це 3 і 37. Ви можете перевірити це, якщо хочете, помноживши ці числа й побачивши, що результат справді дорівнює 111.

$ expr 3 \* 37
111

Якщо ви збільшите стартовий номер на один, то побачите набагато довший список факторів:

$ factor 112
112: 2 2 2 2 7

Зрозуміло, що множники, необхідні для досягнення 112, набагато важливіші. Пам’ятайте, що всі множники мають бути простими числами, інакше ми побачимо лише 16 і 17.

$ expr 2 \* \2 \* 2 \* 2 \* 7
112

Числові оператори

У таблиці нижче наведено числові оператори, які можна використовувати з більшістю числових команд. Просто не забувайте використовувати зворотну косу риску перед *.

Числові порівняння

Також можна порівнювати числа за допомогою операцій, які перевіряють, чи числові змінні рівні, нерівні, більші чи менші за деякі інші змінні. Ось один приклад:

$ num=11
$ if [ $num == 11 ]; then echo eleven; else echo oops; fi
eleven

Щоб перевірити, чи числа дорівнюють або більші за наступне значення, скористайтеся командою на кшталт однієї з цих:

$ if [ $num -ge 11 ]; then echo ok; else echo oops; fi
ok
$ if [ $num -gt 11 ]; then echo wow; else echo ok; fi
ok
$ if [ $num -lt 9 ]; then echo wow; else echo ok; fi
ok
$ if [ $num != 11 ]; then echo wow; else echo ok; fi
ok

У таблиці нижче наведено числові порівняння:

Створення списків чисел

Ви можете створювати списки чисел за допомогою команд jot або seq (залежно від того, яку версію Linux використовуєте).

$ jot 5
1
2
3
4
5
$ seq 1 5
1
2
3
4
5

Насправді немає вимоги починати з 1.

$ seq 27 33
27
28
29
30
31
32
33

Вам також не потрібно перераховувати кожне число у вказаному діапазоні. Команда seq нижче починається з 10, збільшує кожне число на 4, а потім зупиняється, коли досягає останнього збільшення в діапазоні (24 у цьому випадку).

$ seq 10 4 24
10
14
18
22

Підсумки

Виконання математичних задач у командному рядку може бути цікавим і корисним, коли вам потрібно зробити обчислення.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.