Простая арифметика
В табл. 34.2 перечислены обычные арифметические операторы.
Таблица 34.2. Арифметические операторы
Оператор
Описание
+
Сложение
-
Вычитание
*
Умножение
/
Целочисленное деление
**
Степень числа
%
Деление по модулю (остаток от целочисленного деления)
Действия большинства из перечисленных операторов не вызывают вопросов, кроме целочисленного деления и деления по модулю, которые требуют дополнительного обсуждения.
Поскольку оболочка поддерживает только арифметические операции с целыми числами, результатом деления всегда будет целое число:
[me@linuxbox ~]$ echo $(( 5 / 2 ))
2
Это обстоятельство увеличивает важность операции определения остатка от деления:
[me@linuxbox ~]$ echo $(( 5 % 2 ))
1
Используя операторы деления и деления по модулю, можно определить, что деление 5 на 2 дает в результате 2 с остатком 1.
Вычисление остатка от деления удобно использовать в циклах. Это позволяет выполнять в цикле определенные операции с заданным интервалом. В примере ниже выводится строка чисел, в которой выделяются числа, кратные 5:
#!/bin/bash
# modulo : демонстрация оператора деления по модулю
for ((i = 0; i <= 20; i = i + 1)); do
remainder=$((i % 5))
if (( remainder == 0 )); then
printf "<%d> " $i
else
printf "%d " $i
fi
done
printf " "
Запустив этот сценарий, вы получите следующий результат:
[me@linuxbox ~]$ modulo
<0> 1 2 3 4 <5> 6 7 8 9 <10> 11 12 13 14 <15> 16 17 18 19 <20>