将shell布尔条件与选择性优先级相结合

时间:2016-10-05 16:20:01

标签: shell

我在脚本开头有两个条件来验证参数。目的是应该传递两个参数,第一个参数必须是"FOO""BAR"。我在下面的工作,但我想知道如何使这个单一的if声明:

#!/bin/bash

if [ "$#" -ne 2 ]; then
        echo "Usage: $0 <FOO or BAR> <Removed for SO>"
        exit
fi
if [ "$1" != "FOO " -a "$1" != "BAR" ]; then
        echo "Usage: $0 <FOO or BAR> <Removed for SO>"
        exit
fi

只是为了澄清一下,我要问的是如何将'#34;逻辑和&#34;与&#34;逻辑或&#34;在shell脚本中。在伪代码中,这就是我想要的:

if ( numArgs != 2 || (someArg != "FOO" && someArg  != "BAR") )

2 个答案:

答案 0 :(得分:1)

您可以在两个条件之间使用/* 1 */ { "_id" : ObjectId("57f52636b9c3ea346ab1d399"), "movieList" : [ { "movieId" : 1.0, "movieRating" : 4.0 } ], "userId" : 5.0 } /* 2 */ { "_id" : ObjectId("57f52636b9c3ea346ab1d39a"), "movieList" : [ { "movieId" : 1.0, "movieRating" : 4.0 }, { "movieId" : 2.0, "movieRating" : 5.0 }, { "movieId" : 3.0, "movieRating" : 5.0 } ], "userId" : 4.0 }

||

答案 1 :(得分:0)

您可以使用正则表达式匹配:

if [[ $# != 2 && ! $1 =~ ^(FOO|BAR)$ ]]
then
   ...
fi

如果第一个参数应该允许更多的值,那么它的优点是更容易适应。

但是,我会将两个条件合二为一,但将它们分开留下并为两者提供不同的错误消息。