Bash脚本,OR语句的语法

时间:2016-07-05 20:45:30

标签: bash

有人能告诉我为什么这个脚本不起作用吗?我得到了

./FileDirTest.sh: line 10: [: missing `]'
./FileDirTest.sh: line 10: n: command not found
./FileDirTest.sh: line 13: [: missing `]'
./FileDirTest.sh: line 13: n: command not found

这是我的脚本。

if [ -d "$PASSED1" ]
then echo "Do you want to execute whole directory?(Y/N)"
     read answer
     if [ "$answer" == "y" || "$answer" == "Y" ] ;
     then echo "Execute"
     fi
     if [ "$answer" == "n" || "$answer" == "N" ] ;
     then echo "No"
          exit 1
     fi
fi

我确定这很简单。我对这一切都不熟悉。

2 个答案:

答案 0 :(得分:3)

||不是[命令的有效运算符;你只能用它来加入两个不同的[命令:

if [ "$answer" = "y" ] || [ "$answer" = "Y" ];

但是,您可以在||的条件命令中使用bash

if [[ "$answer" = "y" || "$answer" = "Y" ]]; 

发生这两个错误中的第一个是因为||是一个特殊的shell运算符,表示上一个命令已完成,但[需要]作为最终参数。发生第二个错误是因为紧跟在$answer之后的||的值被视为要运行的命令的名称。

答案 1 :(得分:1)

除了@ Chepner的回答,您还可以使用bash -o运算符,

 if [ "$answer" == "y" -o "$answer" == "Y" ]; then
      echo "Execute"
 else
      echo "No"
      exit 1
 fi