需要掌握:linux shell 编程:实现运算(expr、$((…))、bc计算浮点数)
介绍
在 Shell 编程中,算术运算主要分为 整数运算 和 浮点数运算 两类,Shell 本身 仅支持整数运算,浮点数需借助外部工具(如 bc、awk)实现。
整数算术运算
使用 $((...))(推荐)
这是最常用的整数运算方式,支持 +、-、*、/、%(取模)、**(幂运算)等:
#!/bin/bash
a=10
b=3
# 加法
echo "$a + $b = $((a + b))" # 输出:10 + 3 = 13
# 减法
echo "$a - $b = $((a - b))" # 输出:10 - 3 = 7
# 乘法(注意:* 无需转义)
echo "$a * $b = $((a * b))" # 输出:10 * 3 = 30
# 除法(整数除法,向下取整)
echo "$a / $b = $((a / b))" # 输出:10 / 3 = 3
# 取模(余数)
echo "$a % $b = $((a % b))" # 输出:10 % 3 = 1
# 幂运算
echo "$a ** $b = $((a ** b))" # 输出:10 ** 3 = 1000
# 复合运算(赋值+运算)
((a += 5)) # 等价于 a = a + 5
echo "a += 5 后:$a" # 输出:a += 5 后:15
使用 expr 命令(老式方法)
expr 是早期 Shell 的算术工具,语法较繁琐(运算符需空格分隔,* 需转义):
#!/bin/bash
m=15
n=4
# 加法
sum=$(expr $m + $n)
echo "$m + $n = $sum" # 输出:15 + 4 = 19
# 乘法(* 需转义)
product=$(expr $m \* $n)
echo "$m * $n = $product" # 输出:15 * 4 = 60
浮点数算术运算(需外部工具)
Shell 本身不支持浮点数,需借助 bc(计算器工具)或 awk 实现:
1. 使用 bc 工具
bc 支持浮点数运算,通过 scale 设置小数位数:
#!/bin/bash
num1=3.14
num2=2.5
# 加法(保留2位小数)
echo "scale=2; $num1 + $num2" | bc # 输出:5.64
# 乘法(保留3位小数)
echo "scale=3; $num1 * $num2" | bc # 输出:7.850
# 除法(保留4位小数)
echo "scale=4; $num1 / $num2" | bc # 输出:1.2560
2. 使用 awk 工具
awk 内置浮点数支持,适合复杂运算:
#!/bin/bash
a=5.5
b=2.2
# 计算 (a + b) * 2
result=$(awk -v x="$a" -v y="$b" 'BEGIN{print (x + y) * 2}')
echo "(a + b) * 2 = $result" # 输出:(a + b) * 2 = 15.4
总结
- 整数运算:优先用
$((...))(简洁高效),其次是let;老式脚本可能用expr。 - 浮点数运算:用
bc(简单运算)或awk(复杂运算),通过scale控制小数位数。 - 运算符支持:整数支持
+、-、*、/、%、**;浮点数需借助外部工具实现所有运算。
根据运算类型选择对应方法,整数运算用 Shell 内置语法,浮点数运算借助 bc 或 awk 即可满足需求!