Bashスクリプトに「eofへの改行禁止」ルールがありますか?

Bashスクリプトに「eofへの改行禁止」ルールがありますか?

envファイルと実行可能ファイルという2つのファイルがあります。 Ubuntuサーバーに展開するとエラーが発生します。

./start-admin: 行 10: 構文エラー: 予期しないファイルの終わり

展開してファイルの末尾に改行を追加すると、エラーが表示されます。削除するとエラーが消えます。再デプロイして改行を追加しないとエラーが表示されますが、改行を追加するとエラーは消えます。この問題の原因は何ですか?

以下は私のスクリプトです。

環境:

if [ "x${WD}" == "x" ];  then echo "missing required conf \"\${WD}\"" >&2; exit -1; fi

export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
export JAR_FILE="$WD/mfa-admin.jar"
export MYSQL_URL=url1
export MYSQL_USER=root
export MYSQL_PASSWORD=pwd
export DB_URL=url2
export DB_USER=user
export DB_PASSWORD=pwd2

export EMAIL_HOST=mail-inbox
export EMAIL_PORT=25
export EMAIL_PERMISSION=false
export FAKE_EMAIL=email
export ACTIVATION_URL=url

export BIND_HOST=0.0.0.0
export BIND_PORT=8282

スタート:

WD=`dirname $0`;

JAVA_OPTS=""

if [ -r "$WD/admin.env.conf" ]; then
  . $WD/admin.env.conf
fi

# required stuff
if [ "x${JAVA_HOME}" == "x" ];                              then echo "missing required conf \"\${JAVA_HOME}\""                                                  >&2; exit -1; fi
if [ "x${JAR_FILE}" == "x" ];                               then echo "missing required conf \"\${JAR_FILE}\""                                                   >&2; exit -1; fi
if [ "x${MYSQL_URL}" == "x" ];                   then echo "missing required conf \"\${MYSQL_URL}\""        >&2; exit -1; fi
if [ "x${MYSQL_USER}" == "x" ];                  then echo "missing required conf \"\${MYSQL_USER}\""       >&2; exit -1; fi
if [ "x${MYSQL_PASSWORD}" == "x" ];              then echo "missing required conf \"\${MYSQL_PASSWORD}\""   >&2; exit -1; fi
if [ "x${DB_URL}" == "x" ];                      then echo "missing required conf \"\${DB_URL}\""                            >&2; exit -1; fi
if [ "x${DB_USER}" == "x" ];                     then echo "missing required conf \"\${DB_USER}\""                           >&2; exit -1; fi
if [ "x${DB_PASSWORD}" == "x" ];                 then echo "missing required conf \"\${DB_PASSWORD}\""                       >&2; exit -1; fi

if [ "x${EMAIL_HOST}" == "x" ];                  then echo "missing required conf \"\${EMAIL_HOST}\""                       >&2; exit -1; fi
if [ "x${EMAIL_PORT}" == "x" ];                  then echo "missing required conf \"\${EMAIL_PORT}\""                       >&2; exit -1; fi
if [ "x${EMAIL_PERMISSION}" == "x" ];            then echo "missing required conf \"\${EMAIL_PERMISSION}\""                 >&2; exit -1; fi
if [ "x${FAKE_EMAIL}" == "x" ];                  then echo "missing required conf \"\${FAKE_EMAIL}\""                       >&2; exit -1; fi
if [ "x${ACTIVATION_URL}" == "x" ];              then echo "missing required conf \"\${ACTIVATION_URL}\""                   >&2; exit -1; fi

if [ "x${BIND_HOST}" == "x" ];                    then echo "missing required conf \"\${BIND_HOST}\""                         >&2; exit -1; fi
if [ "x${BIND_PORT}" == "x" ];                    then echo "missing required conf \"\${BIND_PORT}\""                         >&2; exit -1; fi

JAVA_OPTS="${JAVA_OPTS} -Dmysql.URL=\"${MYSQL_URL}\" "
JAVA_OPTS="${JAVA_OPTS} -Dmysql.USER=\"${MYSQL_USER}\" "
JAVA_OPTS="${JAVA_OPTS} -Dmysql.PASSWORD=\"${MYSQL_PASSWORD}\" "
JAVA_OPTS="${JAVA_OPTS} -Ddb.URL=\"${DB_URL}\" "
JAVA_OPTS="${JAVA_OPTS} -Ddb.USER=\"${DB_USER}\" "
JAVA_OPTS="${JAVA_OPTS} -Ddb.PASSWORD=\"${DB_PASSWORD}\" "

JAVA_OPTS="${JAVA_OPTS} -DEMAIL_HOST=\"${EMAIL_HOST}\" "
JAVA_OPTS="${JAVA_OPTS} -DEMAIL_PORT=\"${EMAIL_PORT}\" "
JAVA_OPTS="${JAVA_OPTS} -DEMAIL_PERMISSION=\"${EMAIL_PERMISSION}\" "
JAVA_OPTS="${JAVA_OPTS} -DFAKE_EMAIL=\"${FAKE_EMAIL}\" "
JAVA_OPTS="${JAVA_OPTS} -DACTIVATION_URL=\"${ACTIVATION_URL}\" "

JAVA_OPTS="${JAVA_OPTS} -DBIND_HOST=\"${BIND_HOST}\" "
JAVA_OPTS="${JAVA_OPTS} -DBIND_PORT=\"${BIND_PORT}\" "

JAVA="$JAVA_HOME/bin/java"

eval \"$JAVA\" $JAVA_OPTS -cp "${WD}:${JAR_FILE}" VertxNode

答え1

このメッセージを受け取った理由は、スクリプト、または`文字列が一致しないためです'"if/then/fi、do/while、またはcase/esacステートメントが一致しない場合でも、これが発生する可能性があります。スクリプトをもう一度確認してみましょう。

関連情報