2015-09-04 97 views
0

我正试图在需要两个条件的命令行上编写一个if/then语句。我似乎无法得到正确的语法。我试过了:如何在命令行中声明包含“或”的条件?

if [ "$var1" == "value1" || "$var2" == "value2"]; 
if [ "$var1" == "value1"] || ["$var2" == "value2"]; 
if [[ "$var1" == "value1" || "$var2" == "value2"]]; 

所有返回错误。我知道这是一个基本问题,但对于命令行脚本来说,我还是比较新的。欢迎任何帮助。

+1

'如果[[ “$ VAR1” ==“VALUE1 “|| “$ var2”==“value2”]];然后:fi;'应该可以工作 – anubhava

+0

我仍然收到错误。 “那么:fi”;必须在同一条线上或什么东西?这是错误:“附近的语法错误;”,然后它指定了代码行。 – jalyper

+0

从@chepner看到下面的答案 – anubhava

回答

1
if [ "$var1" == "value1" || "$var2" == "value2"]; 

[不支持||操作。

if [ "$var1" == "value1"] || ["$var2" == "value2"]; 

差不多。使用=而不是==[,因为POSIX没有定义==。尽管如此,一些shell可能会支持它。该错误不包括在关闭]之前的空格。

if [[ "$var1" == "value1" || "$var2" == "value2"]]; 

是的,但是与上面相同的错误。您在结束]]之前需要一个空格。正确的线是

if [ "$var1" = "value1" ] || [ "$var2" = "value2" ]; 
if [[ "$var1" == "value1" || "$var2" == "value2" ]]; 
+0

感谢你的解释彻底! – jalyper

0

test命令([ ... ]语法)一个支持-o操作者来评估逻辑或病症:

if [ "$var1" = "value1" -o "$var2" = "value2" ] ; then 
    echo match 
else 
    echo fail 
fi