【问题标题】:Syntax error: "fi" unexpected (expecting "then") in bash script语法错误:bash 脚本中的“fi”意外(预期“then”)
【发布时间】: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")

问题出在哪里?

【问题讨论】:

标签: bash command-line scripting sh


【解决方案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 将代码粘贴到(空)文件中。

      这为我解决了这个确切的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-15
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        • 2015-06-08
        • 2019-03-27
        相关资源
        最近更新 更多