我/她运行以下代码片段
#!/bin/bash
if [ "foo" = "foo" ];
then
echo "true"
else
echo "false"
fi
echo "end"
我得到了
sfm_write_buffer_test.sh: line 9: syntax error: unexpected end of file
这没有任何意义。 echo语句工作正常,但遇到if语句时会出现上述错误。
答案 0 :(得分:8)
你在Cygwin,对吗?
正如我在评论中所说,当我复制并粘贴您的脚本并在我的系统上运行它时,它可以工作;输出是
true
end
但是当我将行结尾从Unix样式'\n'
更改为Windows样式'\r\n'
时,我得到了同样的错误。
使用Windows样式的行结尾时,bash看不到then
关键字;它会看到一个名为then\r
的命令。它永远不会尝试执行它,因为它正在扫描匹配的then
或fi
if
关键字(因为它不在行的末尾而识别出来)。
确保您的shell脚本使用Unix样式的行结尾。
答案 1 :(得分:3)
问题是脚本末尾的CRLF。 Shell脚本在看到Windows样式的行结尾时会抛出此错误。您需要使用Unix样式的LF替换shell脚本中的行结尾。每个IDE都有它自己的方式。
Sublime Text 2 ==>查看 - >线路结尾 - > Unix的
Notepad ++ ==>编辑 - > EOL转换 - > UNIX / OSX格式
进行更改并保存文件后,shell脚本应该无错误地执行。
答案 2 :(得分:0)
这不是您的具体问题,但如果您在if语句中粘贴了缩进的heredoc并且已从制表符转换为空格,则也会发生这种情况。由于空格,永远不会找到heredoc的结束分隔符,结果是意外的文件结尾。