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.