【问题标题】:syntax error at line 10: `fi' unexpected [duplicate]第 10 行的语法错误:`fi' 意外 [重复]
【发布时间】:2015-07-23 17:20:30
【问题描述】:
CorrectInstance=DEV
Instance_Name=DEV
if [ $Instance_Name == $CorrectInstance ]
then
   echo "Instance validated sucessfully"
else
   echo "Instance validation failed. Script exited."
   exit
fi

当我在脚本上方运行时,我遇到了错误。

Match.sh[3]: ^M: not found [No such file or directory]
Match.sh: line 3: syntax error at line 10: `fi' unexpected

请多多指教

【问题讨论】:

  • 与眼前的问题无关,应该是[ "$Instance_name" = "$CorrectInstance" ]。也就是说,= 而不是 ==(因为后者是 POSIX sh 标准未定义的扩展名),并在所有扩展名周围加上引号(因此您的测试命令中的空格、全局字符等不能打破它的语法)。这些问题可以通过shellcheck.net 自动发现

标签: unix shell


【解决方案1】:

^M 也是 \r 所以你可能在某个时候在 Windows 系统上安装了它,并在那里编辑了它,行尾是 \r\n。如果有可用的,请尝试在其上运行dos2unix,否则您可以使用sed 之类的工具从行尾删除空格。

【讨论】:

    【解决方案2】:

    根据unix,我认为“==”是错误的。
    它应该是一个等号。 注意等号周围的空格。
    如果你在没有这些空格的情况下运行它,它可能会分配一个变量并返回 true 而不是运行任何测试。

    也将变量放在引号中。这样,如果他们丢失了,你就会有 "" 而不是语法错误。

    我使用这些 {} 只是出于习惯。

    如果我有 $XY=stuff

    print ${XY}123 返回 stuff123

    print $XY123 返回 Nothing 因为变量 $XY123 没有定义。

    重做被炸毁的第 3 行。
    如果 [ "${Instance_Name}" = "${CorrectInstance}" ];那么

    blah blah blah
    

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 2016-09-26
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多