语法错误:bash 脚本中的“fi”意外(预期“then”)
Posted
技术标签:
【中文标题】语法错误:bash 脚本中的“fi”意外(预期“then”)【英文标题】:Syntax error: "fi" unexpected (expecting "then") in bash script 【发布时间】:2015-07-14 06:45:06 【问题描述】:我尝试做脚本:
#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
echo "Host found"
else
echo "Host not found"
fi
然后我打开它:
pi@raspberrypi ~ $ sh /home/pi/sh/test.sh
/home/pi/sh/test.sh: 9: /home/pi/sh/test.sh: Syntax error: "fi" unexpected (expecting "then")
问题出在哪里?
【问题讨论】:
抱歉,我无法用 sh、bash 和 dash 重现这个问题。 正如所写的那样,shell 脚本在语法上是有效的。你确定那是你测试的 exact 脚本吗?从这里复制并粘贴到一个新文件中并运行它。有用吗? 交叉投递:askubuntu.com/questions/618260/script-sh-syntax-error 您的脚本可能有 DOS 行尾。保存你的脚本在dash
中给了我一个类似的语法错误(尽管它是一个意外的文件结尾而不是意外的“fi”)。你可能有混合的行尾;见***.com/q/3773649/1126841。
Bash syntax error: unexpected end of file的可能重复
【参考方案1】:
你可以试试
$ dos2unix /home/pi/sh/test.sh
然后再次运行。
【讨论】:
当你尝试在 cygwin 下从 github 构建一些 posix 项目时,最好在 cygwin 下从 git 克隆它【参考方案2】:这很可能是因为在您的脚本中回车\r
。尝试运行此命令来清理您的脚本。只跑一次。将备份原始文件。
perl -pi.bak -e 's/\r$//' /home/pi/sh/test.sh
【讨论】:
【参考方案3】:如果您在 Windows 上使用 Notepad++ 编辑脚本文件,您可以从程序菜单中转换 EOL
Edit => EOL Conversion => Unix (LF)
【讨论】:
解决了我的问题。重新取出 git repo 时,我的行尾受到了影响,并且“语法错误:“fi”意外(期望“then”)”是自它起作用以来发生了什么变化的唯一线索。很难从消息中整理出来!【参考方案4】:if xxx then
commond
fi
语法错误:“fi”意外(应为“then”)
试试看:
if xxx
then
commond
fi
没关系。
【讨论】:
【参考方案5】:可能是您从 ftp 服务器而不是通过 nano 或其他控制台文件编辑程序保存到文件。
尝试通过 nano 将代码粘贴到(空)文件中。
这为我解决了这个确切的问题。
【讨论】:
以上是关于语法错误:bash 脚本中的“fi”意外(预期“then”)的主要内容,如果未能解决你的问题,请参考以下文章
解析错误:意外的令牌,预期的“,”和语法错误:意外的令牌'['[重复]