Bash if ... then ...语法错误

时间:2015-05-23 12:11:36

标签: bash shell if-statement

我正在尝试使用bash / sh删除基于用户输入的内容,这是我的代码:

echo "remove ? [Y/n]"
read REMOVE
if [ $REMOVE != "n" ] || [ $REMOVE !="N" ];then
  # ... do something ...
  echo "done"
fi

我得到的错误是:

  

./ run.sh:line 8:意外符号«then»附近的语法错误

     

./ run.sh:8行:`if [$ REMOVE!=“n”] || [$ REMOVE!=“N”];然后'

我尝试多次添加/删除空格,但我仍然不明白会发生什么。我也不太了解[[ statement ]] [statement]((statement))之间的所有差异。 如果有人可以提供帮助......

3 个答案:

答案 0 :(得分:2)

在您的原始问题中,您需要一个空格

$REMOVE != "N"

在您对shruti1810的评论回复中,您的$REMOVE变量听起来并不包含您认为包含的内容。

尝试添加

echo $REMOVE

到你的剧本。

我通常使用这个构造

if [ "x$REMOVE" != "xn" ] || [ "x$REMOVE" != "xN" ]
then
  # ... do something ...
  echo "done"
fi

确保我的论证都有效。

答案 1 :(得分:1)

请试试这个:

echo "remove ? [Y/n]"
read REMOVE
if [ $REMOVE != "n" ] && [ $REMOVE != "N" ]
then
  # ... do something ...
  echo "done"
fi

答案 2 :(得分:1)

引用" $ REMOVE"并在"!="周围插入空格; - 像这样;

if [ "$REMOVE" != "n" ] || [ "$REMOVE" != "N" ];then
  # ... do something ...
  echo "done"
fi

问题是没有设置REMOVE或者如果它被设置为空字符串(就像你只是按下'阅读')你会得到$ REMOVE替换为空和你的表达看起来像[ != "N" ]会产生unary operator expected错误。