linux shell中对数字变量做加减运算需用$((...))进行整数运算,支持变量直写、四则运算及c风格简写;let命令兼容但过时;直接赋值如a=$a+1仅为字符串拼接。

在 Linux Shell 脚本中对数字变量做加减运算,关键在于告诉 shell “这是算术运算”,而不是字符串拼接。默认情况下,shell 把变量当字符串处理,直接写 a=$a+1 不会计算,只会拼成字符串。
用 $((...)) 进行整数运算
这是最常用、最推荐的方式,支持加减乘除、取余、括号等基本运算,语法简洁清晰:
- 定义变量后,用
$(( ))包裹表达式即可 - 支持变量名直接写,无需
$(但加了也不报错) - 结果可赋值给新变量,也可直接用于 echo、if 判断等
示例:
count=5 count=$((count + 3)) # 结果是 8 echo $count # 输出 8 <p>x=10; y=4 sum=$((x + y)) diff=$((x - y)) echo "和:$sum,差:$diff" # 和:14,差:6 </p>
用 let 命令(兼容性好,但略显过时)
let 是内置命令,也支持整数运算,语法上允许省略 $,但必须用引号包裹含空格或符号的表达式:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
let "var = var + 1"或let var+=1- 不支持浮点,表达式里不能有空格(除非加引号)
- 现代脚本更倾向用
$(( )),let多见于老脚本或特殊场景(如 for 循环中的递增)
示例:
i=0 let i=i+1 # 等价于 let "i = i + 1" let "j = 2 * i + 3" echo $i $j # 输出 1 5
注意:别用普通赋值做数学运算
下面这些写法不会执行计算,而是字符串操作:
a=$a+1→ 如果 a 原来是 5,结果变成字符串 "5+1"b=$b-2→ 变成类似 "7-2" 的字符串,后续无法直接参与数值判断- 在
if [ $a -eq 10 ]这类测试中,如果 $a 实际是 "5+5",会报错 "integer expression expected"
小技巧:自增/自减写法
在 $(( )) 中可直接使用 C 风格简写:
i=$((i + 1))等价于((i++))或((++i))((i--))、((i += 2))、((i *= 3))都合法- 注意:
(( ))是算术求值命令,返回状态码(0 表示非零结果),常用于 while 或 if 条件中
示例:
n=10 ((n++)) # n 变成 11 echo $n # 输出 11 <p>if ((n > 10)); then echo "n 已超过 10" fi </p>










