Bash умеет целые числа прямо в $(( )):

echo $(( 10 * 3 + 5 ))   # 35
echo $(( 2 ** 10 ))       # 1024

Для дробей — bc. Ключ -l даёт sqrt, sin, log:

echo "scale=4; sqrt(2)" | bc -l   # 1.4142
echo "scale=2; 355/113" | bc      # 3.14

awk считает float в одну строку — удобно когда уже парсишь вывод:

awk 'BEGIN { printf "%.4f\n", 355/113 }'
df / | awk 'NR==2 { printf "used: %.1f%%\n", $3/$2*100 }'

printf форматирует числа без вычислений:

printf "%.2f\n" 3.14159   # 3.14
printf "%d\n" $(( 1024 ** 2 ))

Правило: $(( )) для целых, bc для точных дробей, awk когда уже в пайпе.

#linux #bash #sysadmin