如何在Shell脚本的单个if语句中包含多个与或条件
Bash单个if语句中组合多与或条件的正确写法
你可以通过两种方式在单个if语句里组合多个与或条件,同时修正你原代码里的小问题:
方式1:保留多个[[ ]]结构(拆分条件)
原代码里的[[(写法缺少空格且存在多余嵌套括号,修正后:
if [[ "$op_type" == "roll" ]] || [[ "$Action" == "up" && "$Status" == "Failed" ]] || [[ "$Action" == "up" && "$Status" == "InProgress" ]]; then # 这里写入需要执行的命令 fi
方式2:合并为单个[[ ]]结构(更简洁)
利用[[ ]]内部支持&&和||的特性,结合括号明确优先级,还能简化重复的条件:
if [[ "$op_type" == "roll" || ( "$Action" == "up" && ( "$Status" == "Failed" || "$Status" == "InProgress" ) ) ]]; then # 这里写入需要执行的命令 fi
如果你的Bash版本支持正则匹配(一般4.0及以上版本都支持),还可以进一步简化Status的判断:
if [[ "$op_type" == "roll" || ( "$Action" == "up" && "$Status" =~ ^(Failed|InProgress)$ ) ]]; then # 这里写入需要执行的命令 fi
关键注意点
- 变量引用始终用双引号包裹,避免因变量值含空格、特殊字符导致解析错误
[[ ]]内部的&&优先级高于||,用括号()可以强制改变运算顺序,确保逻辑符合预期- 原代码里的
[[(是语法错误,[[和后续条件之间必须有空格
内容的提问来源于stack exchange,提问作者arpitha patel22
相关产品推荐
相关产品推荐

