Bash 意外标记附近的语法错误';然后';shell脚本

Bash 意外标记附近的语法错误';然后';shell脚本,bash,shell,Bash,Shell,我不熟悉shell脚本,这是我的第一个shell脚本。我遇到了这个错误并陷入其中。下面是简单的代码: #!/bin/sh yes=y; no=n; echo "Do you want to enter batch order id manually? (y/n) " read answer if [ $answer -eq $yes ]; then echo "Please Enter Batch Order Id." elif[ $answer -eq $no ]; then

我不熟悉shell脚本,这是我的第一个shell脚本。我遇到了这个错误并陷入其中。下面是简单的代码:

#!/bin/sh
yes=y;
no=n;
echo "Do you want to enter batch order id manually? (y/n) "
read answer
if [ $answer -eq $yes ]; then
    echo "Please Enter Batch Order Id."
elif[ $answer -eq $no ]; then
    echo "Copying all batch orders."
else
    echo"please enter correct input."
fi

该脚本需要一些小的更改:

#!/bin/sh
yes=y;
no=n;
echo "Do you want to enter batch order id manually? (y/n) "
read answer
if [ "$answer" = $yes ]; then
    echo "Please Enter Batch Order Id."
elif [ "$answer" = $no ]; then
    echo "Copying all batch orders."
else
    echo "please enter correct input."
fi
elif
之后和
[$answer-eq$no]
之前需要一个空格。
这些测试进行字符串比较,而不是数字比较。因此,需要用
=
代替
-eq
。因此,即使用户不输入任何内容,脚本也可以工作,
$answer
被放置在测试中的双引号内。另外,在
echo
之间需要一个空格。请输入正确的输入。

是的,它工作了。谢谢,但我想知道为什么它当时显示错误?你能解释一下是
elif
后缺少空格导致bash出现意外的
then
错误。更具体地说,
[< /代码>不是<代码> Bash < /C>语法的一部分;它是一个命令名(<代码>测试/代码>命令的别名),所以<代码> BASH  >不考虑<代码> ELIF [ < /代码>是单词<代码> ELIF < /代码>后面跟着<代码> [<代码> >;它是一个单词<代码> ELIF [< /代码>。