双括号(( ))是Linux Shell中专用于数值运算与条件判断的高效结构,支持整数运算、C风格比较(如>、==)及逻辑运算,变量可省略$,返回0为真、非0为假,常用于if/while等语句。

Linux 中用双括号 (( )) 做算术表达式判断,核心是把它当作“数值条件测试结构”,它天然支持整数运算和逻辑比较,不依赖外部命令,执行快、语法简洁。
双括号判断的基本写法
双括号内直接写数值表达式或比较式,返回值为 0(真)或 1(假),常用于 if、while 等控制语句中:
if (( a > b )); then echo "a 大于 b"; fiwhile (( ifor (( i=0; i
变量引用不用加 $ 符号
在双括号内部,变量名可直接使用,无需前缀 $,系统自动展开:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
a=5; b=3; if (( a + b == 8 )); then echo "成立"; fi✅ -
if (( $a + $b == 8 )); then ...❌ 虽然部分 shell 也接受,但非标准写法,易混淆且不推荐
支持的运算和比较操作
双括号兼容 C 风格语法,包括:
- 四则与取余:
+, -, *, /, %(除法结果为整数截断) - 自增/自减:
i++, ++i, i--, --i - 位运算:
&, |, ^, ~, > - 关系比较:
==, !=, , >= - 逻辑运算:
&&, ||, !(注意不是-a或-o)
例如:if (( (x & 1) == 0 && y % 3 == 0 )); then echo "x偶且y被3整除"; fi
和单/双方括号的区别要点
避免混用,关键差异如下:
-
[ ]和[[ ]]主要用于字符串或文件测试,数值比较要用-eq等专用操作符,不能直接写==(除非在[[ ]]中且上下文明确为数字) -
(( ))只处理数值,==就是数值相等判断,=是赋值,!=是不等,逻辑清晰 -
if [ $a -eq $b ]和if (( a == b ))效果相同,但后者更简洁、不易出错(比如空变量不会导致语法错误)

















