Syntax error: "fi" unexpected (expecting "then") in bash script
Syntax error: "fi" unexpected (expecting "then") in bash script
我试着做脚本:
#!/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")
问题出在哪里?
这很可能是因为您的脚本中有 carriage-return \r
。试试 运行 这个命令来清理你的脚本。只需 运行 一次。将备份原始文件。
perl -pi.bak -e 's/\r$//' /home/pi/sh/test.sh
你可以试试
$ dos2unix /home/pi/sh/test.sh
又 运行 了。
如果您在 windows 上使用 Notepad++ 编辑脚本文件,您可以使用
从程序菜单转换 EOL
Edit => EOL Conversion => Unix (LF)
if xxx then
commond
fi
语法错误:“fi”意外(应为“then”)
试一试:
if xxx
then
commond
fi
没关系。
可能是您从 ftp 服务器而不是通过 nano 或其他控制台文件编辑程序保存到文件。
尝试通过 nano 将代码粘贴到(空)文件中。
这为我解决了那个确切的问题。
我试着做脚本:
#!/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")
问题出在哪里?
这很可能是因为您的脚本中有 carriage-return \r
。试试 运行 这个命令来清理你的脚本。只需 运行 一次。将备份原始文件。
perl -pi.bak -e 's/\r$//' /home/pi/sh/test.sh
你可以试试
$ dos2unix /home/pi/sh/test.sh
又 运行 了。
如果您在 windows 上使用 Notepad++ 编辑脚本文件,您可以使用
从程序菜单转换 EOLEdit => EOL Conversion => Unix (LF)
if xxx then
commond
fi
语法错误:“fi”意外(应为“then”)
试一试:
if xxx
then
commond
fi
没关系。
可能是您从 ftp 服务器而不是通过 nano 或其他控制台文件编辑程序保存到文件。
尝试通过 nano 将代码粘贴到(空)文件中。
这为我解决了那个确切的问题。