Shell脚本-四则运算符号
一、前言
在 Linux Shell 脚本编程中,我们经常需要对数值进行计算,例如:计数器累加、文件大小比较、资源使用率计算等。虽然 Shell 本身不是一种强类型的编程语言,但它提供了多种方式进行四则运算(加、减、乘、除、取模)。
本文将带你全面了解 Shell 脚本中常用的 四则运算符号及其使用方法,包括整数运算、浮点数运算、不同语法格式的对比,并通过实际代码示例帮助你掌握这些核心技能。
二、Shell 中的四则运算符概览
运算符 | 含义 | 示例 |
---|---|---|
+ | 加法 | a + b |
- | 减法 | a - b |
* | 乘法 | a * b |
/ | 除法(整除) | a / b |
% | 取模(求余) | a % b |
⚠️ 注意:Shell 原生仅支持整数运算,浮点运算需借助外部命令如
bc
或awk
。
三、整数运算的常用方法
✅ 方法1:使用 $(( ... ))
—— 推荐方式
这是最常用、最简洁的整数运算方式。
#!/bin/basha=10
b=3echo $(( a + b )) # 输出: 13
echo $(( a - b )) # 输出: 7
echo $(( a * b )) # 输出: 30
echo $(( a / b )) # 输出: 3 (整除)
echo $(( a % b )) # 输出: 1 (余数)
✅ 优点:
- 语法简洁
- 支持嵌套和复杂表达式
- 性能高
✅ 方法2:使用 let
命令
let
命令用于执行算术表达式赋值。
#!/bin/basha=10
b=3let "sum = a + b"
let "diff = a - b"
let "prod = a * b"
let "div = a / b"echo $sum # 输出: 13
echo $div # 输出: 3
⚠️ 注意:
let
不支持浮点数,且表达式中不能有空格(除非用引号包围)。
✅ 方法3:使用 expr
命令
expr
是一个外部命令,用于求值表达式。
#!/bin/basha=10
b=3expr $a + $b # 输出: 13
expr $a - $b # 输出: 7
expr $a \* $b # 注意:* 需要转义
expr $a / $b # 输出: 3
expr $a % $b # 输出: 1
⚠️ 注意事项:
- 操作符两边必须有空格
*
必须写成\*
,否则会被 shell 解释为通配符- 性能较低,不推荐用于复杂运算
四、浮点数运算(支持小数)
Shell 原生不支持浮点运算,需借助外部工具。
✅ 使用 bc
命令(推荐)
bc
是 Linux 下强大的任意精度计算器语言。
#!/bin/basha=10.5
b=3.2# 加法
result=$(echo "$a + $b" | bc)
echo $result # 输出: 13.7# 乘法(保留2位小数)
result=$(echo "scale=2; $a * $b" | bc)
echo $result # 输出: 33.60# 除法(保留3位小数)
result=$(echo "scale=3; $a / $b" | bc)
echo $result # 输出: 3.281
✅
scale=N
表示保留 N 位小数。
✅ 使用 awk
命令(灵活强大)
awk
也可用于浮点运算,特别适合在管道中处理数据。
#!/bin/basha=10.5
b=3.2result=$(awk "BEGIN {print $a + $b}")
echo $result # 输出: 13.7result=$(awk "BEGIN {printf \"%.2f\", $a * $b}")
echo $result # 输出: 33.60
五、实际应用场景示例
✅ 场景1:计算磁盘使用率
#!/bin/bashtotal=$(df / | tail -1 | awk '{print $2}')
used=$(df / | tail -1 | awk '{print $3}')# 使用 bc 计算百分比
usage=$(echo "scale=2; $used * 100 / $total" | bc)
echo "磁盘使用率: ${usage}%"
✅ 场景2:循环计数器
#!/bin/bashcount=0
for i in {1..5}; dolet "count += i"
done
echo "总和: $count" # 输出: 15
✅ 场景3:判断奇偶数
#!/bin/bashnum=7
if (( num % 2 == 0 )); thenecho "$num 是偶数"
elseecho "$num 是奇数"
fi
六、运算符优先级(参考)
优先级 | 运算符 | 说明 |
---|---|---|
1 | () | 括号 |
2 | * / % | 乘、除、取模 |
3 | + - | 加、减 |
4 | = | 赋值 |
示例:
echo $(( 2 + 3 * 4 )) # 输出: 14
echo $(( (2 + 3) * 4 )) # 输出: 20
七、常见错误与注意事项
错误 | 正确做法 | 说明 |
---|---|---|
echo $a*$b | echo $(($a * $b)) | * 会被 shell 当作通配符 |
(( 3.5 + 2 )) | 使用 bc | Shell 不支持浮点运算 |
let a = b + c | let "a = b + c" | let 中表达式需加引号或无空格 |
忘记赋值 | result=$((a + b)) | 运算结果需赋值给变量才能使用 |
八、总结对比表
方法 | 支持整数 | 支持浮点 | 是否推荐 | 适用场景 |
---|---|---|---|---|
$(( ... )) | ✅ | ❌ | ✅ 推荐 | 整数运算、条件判断 |
let | ✅ | ❌ | ✅ | 变量自增、循环计数 |
expr | ✅ | ❌ | ⚠️ 一般 | 简单表达式(兼容旧脚本) |
bc | ✅ | ✅ | ✅ 推荐 | 浮点运算、科学计算 |
awk | ✅ | ✅ | ✅ 推荐 | 数据处理、格式化输出 |
九、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!