Shell脚本算术运算首选$(( )),支持完整整数运算且无需转义;数值比较用-eq/-lt等,字符串比较用=且两侧必须空格;文件判断用-f/-d/-r等,条件组合推荐[[ ]]配合&&/||。
Shell 脚本里做算术和判断,关键不是“能不能”,而是“用对语法”——写错空格、混用符号、忽略类型差异,很容易执行失败或逻辑出错。
Shell 不直接支持浮点,整数运算是主力。三种写法中,$(( )) 最推荐:
result=$(( (a + b) * c ))
count=$((count + 1)) 或简写为 ((count++))
expr 和 $[ ] 已逐步淘汰:expr 要求每个操作符前后加空格,* 必须写成 *;$[ ] 兼容性差,bash 新版本不鼓励使用Shell 对类型敏感,数值比较不能用 =,字符串比较不能用 -eq:
-eq、-lt、-ge 等,写在 [ ] 内,如:[ $num -gt 10 ]
= 或 ==(推荐 =),注意等号两侧必须有空格:[ "$str" = "yes" ]
-z(空)或 -n(非空):[ -z "$input" ] 比 [ "$input" = "" ] 更安全[ $a = $b ] —— 若变量为空,会变成 [ = ],语法错误运维脚本高频需求,重点记住这几个实用判断:
-f file:存在且是普通文件(不是目录、链接等)-d dir:目录存在-r /path、-w /path、-x /path:对应读、写、执行权限-s file:文件存在且大小 > 0(非空文件)-e path:路径存在(文件、目录、链接均可)单行逻辑或复杂分支,靠的是组合方式清晰、括号明确:
&& 和 ||,比如:[ -f "$log" ] && rm "$log"
[ ] 内的 -a(and)、-o(or),但更推荐用 [[ ]] 配合 &&/||,例如:[[ -r "$file" && -s "$file" ]]
if 结构注意 then 和 fi 必须成对,elif 可多层,条件后要加分号或换行case,比一堆 if-elif 更易读,尤其处理命令行参数时