シェルスクリプト - 予期しないトークン 'else'の近くに構文エラーがあります。

シェルスクリプト - 予期しないトークン 'else'の近くに構文エラーがあります。

次のシェルスクリプトを使用すると、なぜエラーが発生するのですか?

syntax error near unexpected token `else'

シェルスクリプト

echo "please enter username"
read user_name
echo "please enter password"
read -s pass
echo ${ORACLE_SID}
SID=${ORACLE_SID}
if ["${ORACLE_SID}" != 'Test'] then
sqlplus -s -l $USER_NAME/$PASS@$SID <<EOF
copy from scott/tiger@orcl insert EMP using select * from EMP
exit
EOF
else
echo "Cannot copy"
fi

ベストアンサー1

次のように条件部分(角括弧)を終了する必要があります。

セミコロンで

if [ "${ORACLE_SID}" != 'Test' ]; then
                                ^ semicolon

または改行文字

if [ "${ORACLE_SID}" != 'Test' ]
                                ^ newline
then

[注:前後にもスペースを追加する必要があります]

[ "${ORACLE_SID}" != 'Test' ]
 ^ space                   ^ space

背景

あるいは、改行が発生した理由は、ステートメントの条件付き部分が単にコマンドである;ためです。if文字通りすべての長さのコマンドです。シェルはコマンドを実行し、コマンドの終了状態を確認し、その部分を実行するのか、thenそれともそのelse部分を実行するのかを決定します。

コマンドの長さに制限はないため、条件部分の終わりを示す表示が必要です。つまり;、改行文字の後にthen

後にスペースがあるのはコマンドです[[通常はシェルの組み込みコンポーネントです。シェルは、最後の必須引数を[含む残りの引数を使用してコマンドを実行します。]シェルの後にスペースを入れないと、コマンドで実行を[試みて失敗します。[whatever

前の空白がある理由は]似ている。そうでなければ、それはそれ自身のパラメータとして認識されないからです。

おすすめ記事