【问题标题】:check two conditions in if statement in bash检查bash中if语句中的两个条件
【发布时间】:2014-10-13 19:27:14
【问题描述】:

if 语句的书写有问题

var1=`COMMAND | grep <Something>`
if [ -n "$var1" ] && if [[ "$var1" != string ]]; then
    .
    .
    .
fi

我想写 if 语句来检查:

如果 var1 不为空 AND 如果字符串(可能是 hello word)不在 var1 中,则执行操作。

我该怎么做?

【问题讨论】:

    标签: bash if-statement conditional


    【解决方案1】:

    只需使用这样的东西:

    if [ -n "$var1" ] && [[ ! $var1 == *string* ]]; then
    ...
    fi
    

    看一个例子:

    $ v="hello"
    $ if [ -n "$v" ] && [[ $v == *el* ]] ; then echo "yes"; fi
    yes
    $ if [ -n "$v" ] && [[ ! $v == *ba* ]] ; then echo "yes"; fi
    yes
    

    第二个条件是String contains in bash 中指示的变体。

    【讨论】:

    • 我可以使用[[ $v != *el* ]] 吗?
    • 操作,已更新。你需要[[ ! $var == *string* ]]。也就是说,否定条件。
    • 好的...这正是我需要的...谢谢
    • 还有! [[ $var1 == *string* ]][[ $var1 != *string* ]]。选项比比皆是:)
    【解决方案2】:

    其他可能性:

    if [ -n "$var1" -a "$var1" != string ]; then ...
    
    if [ "${var1:-xxx}" != "string" ]; then ...
    

    【讨论】:

    • 谢谢...我也在 if 语句中搜索 -a-o
    • 您可以忽略 -a-o 作为布尔运算符。甚至 POSIX 标准也建议使用[ ... ] &amp;&amp; [ ... ] 代替[ ... -a ...](同样使用|| 代替-o)。
    • @chepner 很有趣。感谢您的信息。
    • @chepner 谢谢..所以最好使用&amp;&amp;|| 而不是-a-o...
    • @MortezaLSC 是的,请参阅this good explanation:“请注意,POSIX 建议使用&amp;&amp;||,并在-a-o 上使用单括号表示法”。
    【解决方案3】:

    你应该把这个条件改写成这样:

    var1=`COMMAND | grep <Something>`
    if [ -n "$var1" ] && [[ "$var1" != "string" ]]; then
    .
    .
    .
    fi
    

    或等价物:

    if test -n "$var1"  && test "$var1" != "string"
    then
    ...
    fi
    

    【讨论】:

    • Ohhh.. 我以为我不能用字符串使用 [] 格式//// 谢谢.. 让我检查一下
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2012-12-13
    • 2012-06-10
    相关资源
    最近更新 更多