Appearance
算术扩展
Shell 提供了多种进行整数算术运算的方式。
四种算术方式
1. $(( )) — 算术扩展(推荐)
bash
result=$((3 + 5))
echo $result # 8
a=10
b=3
echo $((a + b)) # 13
echo $((a - b)) # 7
echo $((a * b)) # 30
echo $((a / b)) # 3(整数除法)
echo $((a % b)) # 1(取余)
echo $((a ** b)) # 1000(幂运算,Bash 支持)2. let 命令
bash
let result=3+5
echo $result # 8
let a=10 b=3
let sum=a+b
echo $sum # 133. expr 命令(老式)
bash
result=$(expr 3 + 5) # 注意:运算符两侧必须有空格
echo $result # 8
# 乘法需要转义
result=$(expr 3 \* 5)
echo $result # 154. (( )) — 算术命令(用于条件判断)
bash
a=5
if (( a > 3 )); then
echo "a 大于 3"
fi
(( count++ )) # 自增
(( count-- )) # 自减支持的运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
+ | 加法 | $((3 + 5)) → 8 |
- | 减法 | $((10 - 3)) → 7 |
* | 乘法 | $((4 * 5)) → 20 |
/ | 整数除法 | $((10 / 3)) → 3 |
% | 取余 | $((10 % 3)) → 1 |
** | 幂运算 | $((2 ** 10)) → 1024 |
++ | 自增 | $((a++)) |
-- | 自减 | $((a--)) |
+= | 加并赋值 | $((a += 5)) |
-= | 减并赋值 | $((a -= 3)) |
*= | 乘并赋值 | $((a *= 2)) |
位运算
bash
echo $((5 & 3)) # 按位与:1
echo $((5 | 3)) # 按位或:7
echo $((5 ^ 3)) # 按位异或:6
echo $((~5)) # 按位取反:-6
echo $((5 << 1)) # 左移:10
echo $((5 >> 1)) # 右移:2比较运算(返回 0 或 1)
bash
echo $((5 > 3)) # 1(真)
echo $((5 < 3)) # 0(假)
echo $((5 == 5)) # 1(真)
echo $((5 != 3)) # 1(真)三目运算符
bash
a=10
result=$((a > 5 ? 100 : 0))
echo $result # 100实用示例
计数器
bash
#!/bin/bash
count=0
for i in 1 2 3 4 5; do
(( count++ ))
done
echo "计数:$count" # 5计算百分比
bash
#!/bin/bash
used=75
total=100
percent=$(( used * 100 / total ))
echo "使用率:${percent}%"字节转换
bash
#!/bin/bash
bytes=1073741824
kb=$(( bytes / 1024 ))
mb=$(( bytes / 1024 / 1024 ))
gb=$(( bytes / 1024 / 1024 / 1024 ))
echo "${bytes} 字节 = ${kb} KB = ${mb} MB = ${gb} GB"奇偶判断
bash
#!/bin/bash
for n in 1 2 3 4 5 6; do
if (( n % 2 == 0 )); then
echo "$n 是偶数"
else
echo "$n 是奇数"
fi
done进制转换
bash
# 其他进制转十进制
echo $((2#1010)) # 二进制 1010 → 10
echo $((8#17)) # 八进制 17 → 15
echo $((16#FF)) # 十六进制 FF → 255
# 十进制转其他进制
printf "%b\n" 10 # 转二进制(通过 printf)
printf "%o\n" 255 # 转八进制 → 377
printf "%x\n" 255 # 转十六进制 → ff浮点数运算
Shell 原生不支持浮点数,需借助 bc 或 awk:
bash
# 使用 bc
result=$(echo "scale=2; 10 / 3" | bc)
echo $result # 3.33
# 计算平方根
sqrt=$(echo "scale=4; sqrt(2)" | bc)
echo $sqrt # 1.4142
# 使用 awk
result=$(awk 'BEGIN { printf "%.2f\n", 10/3 }')
echo $result # 3.33