次のシェルスクリプトを使用すると、なぜエラーが発生するのですか?
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
前の空白がある理由は]
似ている。そうでなければ、それはそれ自身のパラメータとして認識されないからです。