Системи 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, щоб не пропустити жодну публікацію!