【问题标题】:Getting Syntax error: "fi" unexpected (expecting "then") in shell scripts获取语​​法错误:shell脚本中的“fi”意外(预期“then”)
【发布时间】:2017-07-30 02:12:37
【问题描述】:

我正在为备份设置一些 shell 脚本。一切正常,但是当我使用 if then 语句时出现语法错误。

查看https://www.tutorialspoint.com/unix/if-else-statement.htm,他们使用了一个简单的 if 语句,该语句适用于网站,因为它有一个 try it pop 部分。当我将内容复制到另存为 .sh 的文件中并在我的 ubuntu 服务器(16.04.2 x64)上尝试时,出现语法错误:“fi”意外(期望“then”)

来自网站的代码如下

#!/bin/sh
a=10
b=20

if [ $a == $b ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

要在我使用的终端上运行

sh /path/to/file/script.sh

有几个问题被问到并得到了回答,但似乎没有一个与我的情况相同。有什么我需要在服务器上更新的吗?如果我使用 bash 而不是 sh 它会说意外令牌。有人遇到过这个问题吗?

如果它可能有帮助,当我在终端中运行时,它似乎不喜欢空格,下面是完整的错误

sh /var/www/check-day.sh
: not foundeck-day.sh: 4: /var/www/check-day.sh:
/var/www/check-day.sh: 10: /var/www/check-day.sh: Syntax error: "fi" 
unexpected (expecting "then")

【问题讨论】:

  • 为我工作.... 刚刚运行您的代码。确保您正确复制和粘贴 - 不要错过 then
  • @PressingOnAlways 让我更新一下问题,另一个问题是它不喜欢空格,如果这意味着什么。
  • 使用=而不是== 更便于移植,具体取决于您使用的sh 实现,但如果这是问题所在,您会收到不同的错误消息。您的文件是否可能具有 Windows 样式的 CR-LF 行尾?

标签: linux bash shell if-statement


【解决方案1】:

您的脚本中有 CR。使用dos2unix修复。

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多