Bash поддерживает работу с целыми числами напрямую. Для работы с вещественными (дробными) числами используются утилиты bc, awk и другие.
Для целых чисел Bash предоставляет встроенные механизмы:
| Синтаксис | Описание |
|---|---|
| $(( выражение )) | Арифметика Bash |
| let переменная=выражение | Операции через let |
| expr | POSIX-совместимая утилита |
Примеры:
echo $((2 + 3)) # 5 let x=7*3 echo $x # 21 expr 10 / 2 # 5
Поддерживаемые операторы:
| Знак | Описание |
|---|---|
| + | сложение |
| - | вычитание |
| * | умножение |
| / | деление (только целые числа) |
| % | остаток от деления |
| ** | возведение в степень (Bash 4+) |
Пример:
echo $((2 ** 4)) # 16
| Синтаксис | Описание |
|---|---|
| -eq | равно |
| -ne | не равно |
| -lt | меньше |
| -le | меньше или равно |
| -gt | больше |
| -ge | больше или равно |
Пример:
a=5 b=3 if [ $a -gt $b ]; then echo "$a больше $b" fi
Bash не поддерживает дробные числа напрямую. Используйте:
Пример с bc:
echo "scale=2; 10 / 3" | bc # 3.33
Пример с awk:
awk 'BEGIN {print 10 / 3}' # 3.33333
Поддерживаются в bc с флагом -l:
echo "s(0.5)" | bc -l # синус echo "sqrt(25)" | bc -l # корень
x=5 ((x++)) # пост-инкремент ((x--)) # пост-декремент ((++x)) # префиксный инкремент echo $x
Или с let:
let x+=1 let x-=1
Получение числа из файла/команды:
num=$(cat file.txt) echo $((num + 1))
Проверяйте, что переменные содержат числа:
[[ "$var" =~ ^[0-9]+$ ]] && echo "ОК"
Цикл с числами:
for ((i=1; i<=5; i++)); do echo $i done
Генерация случайного числа:
echo $RANDOM # от 0 до 32767 echo $(($RANDOM % 100)) # от 0 до 99
Варианты:
expr 2 + 2 # 4
echo $((2 + 2)) # 4
echo "2 + 2" | bc # 4
awk 'BEGIN {print 2 + 2}' #4
let result=2+2 echo $result #4
| Метод | Поддержка дробей | Подходит для скриптов | Примечание |
|---|---|---|---|
| expr | ✘ | Да | Требует пробелов между операндами |
| $(( )) | ✘ | Да | Встроено в Bash |
| bc | ✔ | Да | Поддержка дробей и функций |
| awk | ✔ | Да | Удобен для текстовой обработки |
| let | ✘ | Да | Упрощённый синтаксис, только Bash |
Для целых чисел используйте:
Для вещественных и сложных вычислений:
Все методы легко встраиваются в Bash-скрипты и работают в терминале Linux.