Bash If具有多个要求的语句未正确地失败测试

时间:2014-02-25 23:02:24

标签: bash centos sh

我遇到的问题涉及多个IF语句。出于某种原因,即使使用以下设置,脚本也会根据以下代码进行验证:

SSLSite定义为N

SSLOnly未定义

子域名定义为N

if ([[ $SSLSite == y* || $SSLSite == Y*  ]] && [[ $SSLOnly == n* || $SSLOnly == N* ]] && [[ $Subdomain == n* ]] || [[ $Subdomain == N* ]])

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您的长期情况可以缩短为:

[[ "$SSLSite" == [yY]* && "$SSLOnly" == [nN]* && "$Subdomain" == [nN]* ]]

答案 1 :(得分:2)

要直接回答您的问题,问题是您的最后一个条件:[[ $Subdomain == n* ]] || [[ $Subdomain == N* ]]

||此处未在其他子句中的[[ .. ]]内分组。这给你

(A || B) && (C || D) && (E) || (F) 

你想要的地方

(A || B) && (C || D) && (E || F)

如果单独F为真,则前一个表达式为真,这就是为什么它在Subdomain=N

时验证的原因

你可以通过制作最后一个句子[[ $Subdomain == n* || $Subdomain == N* ]]来解决它,但显然anubhava的语法更好。