语法错误:bash 脚本中的“fi”意外(期望“then”)

问题描述 投票:0回答:6

我尝试做脚本:

#!/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")

问题出在哪里?

bash command-line scripting sh
6个回答
17
投票

你可以试试

$ dos2unix /home/pi/sh/test.sh

然后再次运行。


7
投票

这很可能是因为脚本中的回车符

\r
。尝试运行此命令来清理您的脚本。只需运行一次。原始文件将被备份。

perl -pi.bak -e 's/\r$//' /home/pi/sh/test.sh

3
投票

如果您在 Windows 上使用 Notepad++ 编辑脚本文件,您可以使用

从程序菜单转换 EOL
Edit => EOL Conversion => Unix (LF)

3
投票
if xxx then
  commond
fi

语法错误:“fi”意外(期望“then”)

尝试一下:

if xxx 
then
  commond
fi

没关系。


0
投票

您可能是从 ftp 服务器保存到文件的,而不是通过 nano 或其他控制台文件编辑程序保存到文件。

尝试通过 nano 将代码粘贴到(空)文件中。

这为我解决了这个问题。


0
投票

就我而言,问题是 CRLF 而不是 LF。我刚刚更改了vscode中的选项并再次运行。我正在使用 vs code,所以我只是单击下面的选项来更改它:

在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.