语法错误:文件结束意外(期待"然后")

use*_*805 8 unix linux shell minecraft

我正在为Minecraft服务器插件更新程序制作此代码我是一个新的shell脚本程序,所以我不知道很多...
当我运行此代码时,我收到一个错误:

#!/bin/sh
export PATH=$PATH:.
#Options
PLUGINDOWNLOADLINK=http://api.bukget.org/3/plugins/bukkit/$PLUGINNAME/latest/download
# Plugin folder
if [ -f $PWD\plugins ]; then
PLUG=$PWD\plugins 
else
PLUG=$PWD\plug-ins
fi

cd $PLUG

if [ ! -f .\update ]; then
mkdir update
echo Making Directory "update"..
fi

# Plugins Found
    for i in $( ls );
    do
        PLUGINNAME=$i
    done
    cd .\update

    wget $PLUGINDOWNLOADLINK

    # No Plugins Found
    if [ ! -f $PLUG ]; then
    echo
echo
echo    No plugin found.
echo
echo
echo
echo   Plugins can be downloaded here:
echo   http://dev.bukkit.org/bukkit-plugins
fi

# stop 
sleep 3s
exit
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Syntax error: end of file unexpected (expecting "then")
Run Code Online (Sandbox Code Playgroud)

所以我把"then"放在它想要我的地方并再次运行它:
它现在给了我这个错误:

Syntax error: end of file unexpected
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上写了记事本++
如何解决这个问题?

gle*_*man 18

  1. Unix目录分隔符是正斜杠而不是反斜杠.
  2. 您的Windows编辑器是否可以选择以"Unix"文件格式保存文件?shell then^M在末尾看到带有回车符的单词.如果您没有dos2unix,请尝试运行此命令:sed -i 's/\r$//' filename


小智 18

我遇到了同样的问题.问题是文件的格式是"dos",但在linux shell中需要"unix",所以我安装了"dos2unix"

$ sudo apt-get install dos2unix
Run Code Online (Sandbox Code Playgroud)

或者如果您使用emacs,您可以这样做:

C-x RET f unix
Run Code Online (Sandbox Code Playgroud)

祝好运 :)