将shell布尔条件与选择性优先级组合
我在脚本开头有两个条件来验证参数。其目的是只传递两个参数,第一个参数必须是将shell布尔条件与选择性优先级组合,shell,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
“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
您可以在两个条件之间使用
|
:
if [ "$#" -ne 2 ] || [ "$1" != "FOO" -a "$1" != "BAR" ]; then
echo "Usage: $0 <FOO or BAR> <Removed for SO>"
exit
fi
if[“$#”-ne 2]|[“$1”!=“FOO”-a“$1”!=“BAR”];然后
echo“用法:$0”
出口
fi
您可以使用正则表达式匹配:
if [[ $# != 2 && ! $1 =~ ^(FOO|BAR)$ ]]
then
...
fi
这样做的优点是,如果第一个参数允许有更多的值,则更容易调整
但是,我不会将这两个条件合并为一个,而是将它们分开,并为它们提供不同的错误消息。右侧条件中的
-a
是否比|
具有更高的优先级?不需要优先级,因为|
之后的所有内容都在[…]
这意味着将单独评估[…]
。
if [[ $# != 2 && ! $1 =~ ^(FOO|BAR)$ ]]
then
...
fi