具有多个要求的 Bash If 语句未正确通过测试

  • 本文关键字:语句 测试 If Bash bash centos sh
  • 更新时间 :
  • 英文 :


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

SSLSite 被定义为 N

SSL未定义

子域定义为 N

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

有什么想法吗?

谢谢。

long if 条件可以缩短为:

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

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

此处的||不像其他子句那样分组在[[ .. ]]内。这给你

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

你想要的地方

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

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

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

相关内容

  • 没有找到相关文章

最新更新