web-dev-qa-db-ja.com

構文エラー:予期しないファイルの終わり(「then」を期待)

私はMinecraftサーバープラグインアップデーター用にこのコードを作成しています。私は新しいシェルスクリプターなので、よくわかりません...
このコードを実行すると、エラーが発生します:

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

このエラーが発生します:

Syntax error: end of file unexpected (expecting "then")

だから私はそれが私が望んでいた場所に「それから」を置き、それを再び実行した:
このエラーが発生しました:

Syntax error: end of file unexpected

私はそれをWindows7のメモ帳++で書いた
どうすればこれを修正できますか?

8
user2649805

私は同じ問題に遭遇しました。問題は、ファイルの形式が「dos」であるということですが、Linuxシェルでは「unix」が必要なので、「dos2unix」をインストールします。

$ Sudo apt-get install dos2unix

または、emacsを使用している場合は、次のことができます。

C-x RET f unix

幸運を :)

18
Ni Xiaoni
  1. Unixディレクトリ区切り文字はバックスラッシュではなくスラッシュです。
  2. Windowsのエディターには、ファイルを「Unix」ファイル形式で保存するオプションがありますか?シェルは言葉を見ていますthen^M最後にキャリッジリターンがあります。 dos2unixがない場合は、次のコマンドを実行してみてください。sed -i 's/\r$//' filename
18
glenn jackman

これはファイル形式が原因です。私も同じ問題に直面しました。 geditを使用して、拡張子が(.sh)の別のファイルを作成するだけです。次に、コードを新しいドキュメントに貼り付けます。これで問題が解決することを願っています。

gedit file-name.sh

0
Pratik