Shell脚本IF语句与逻辑运算符判断文件存在结果不符合预期
问题修复方案
错误原因
你的分支判断逻辑完全和预期需求倒置,是输出结果不符合预期的核心原因:
- 第一个
if分支的判断条件为前两个文件存在、第三个文件不存在就返回Yes,和你要求的「三个文件全部存在返回Yes」完全不符 elif分支的判断逻辑为「任意一个文件不存在」就返回Partially,哪怕三个文件全部不存在也会命中该分支,永远走不到返回No的else分支- 仅有的
else分支只有在三个文件全部存在时才会触发,返回No,完全和需求倒置
修复后代码
建议先统计存在的文件数量再做分支判断,逻辑更清晰不易出错:
function IsPortalDown() { case "$1" in NodeOne ) # 统计存在的文件数量 exist_count=0 [[ -f "$wpsdmgr" ]] && ((exist_count++)) [[ -f "$wpsnodeagent" ]] && ((exist_count++)) [[ -f "$wpsserver" ]] && ((exist_count++)) if [[ $exist_count -eq 3 ]]; then echo "Yes" elif [[ $exist_count -ge 1 ]]; then echo "Partially" else echo "No" fi ;; NodeTwo ) ;; esac }
注意事项
- 三个路径常量
wpsdmgr、wpsnodeagent、wpsserver必须定义在函数调用之前,否则变量为空会导致判断失效 - 代码里给变量加了双引号,避免路径存在空格时解析错误
内容的提问来源于stack exchange,提问作者Nizar Yousri
相关产品推荐
相关产品推荐

