我尝试做脚本:
#!/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")
问题出在哪里?
你可以试试
$ dos2unix /home/pi/sh/test.sh
然后再次运行。
这很可能是因为脚本中的回车符
\r
。尝试运行此命令来清理您的脚本。只需运行一次。原始文件将被备份。
perl -pi.bak -e 's/\r$//' /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 将代码粘贴到(空)文件中。
这为我解决了这个问题。
就我而言,问题是 CRLF 而不是 LF。我刚刚更改了vscode中的选项并再次运行。我正在使用 vs code,所以我只是单击下面的选项来更改它: