0

SQL を実行したい bash スクリプトに問題があります。
例として、単純に書くと:

sqlplus -s << EOF
${USER}/${PASSWD}@DataBase
show user;
exit;

できます。
しかし、ループに入れるとすぐに機能しなくなります。
例えば ​​:

while (condition)
do 
   echo $ANSWER         
   read -p '[y/n]' ANSWER  
   echo $ANSWER  
   if [ $ANSWER = 'y' ]  
   then  
        sqlplus -s << EOF  
        ${USER}/${PASSWD}@DataBase  
        show user;  
        exit;
        EOF
        break  
   elif [ $ANSWER = 'n' ]  
   then  
        break  
   fi
done
echo $ANSWER

そして、私が得た結果は次のとおりです:行26:構文エラー:予期しないファイルの終わり
(行「echo $ ANSWER」が行25であることを知っています...)

なぜそれが機能したくないのかについて誰かが考えているなら、私は助けに本当に感謝しています!

4

1 に答える 1

0

あなたの問題は、シェルがヒアドキュメントの区切り文字を行の先頭に期待していることです。EOF が行の途中にあるため、区切り文字として認識されなくなりました。

これは期待どおりに機能します。

while (true)
do 
   echo $ANSWER         
   read -p '[y/n]' ANSWER  
   echo $ANSWER  
   if [ $ANSWER = 'y' ]  
   then  
        sqlplus -s << EOF  
        ${USER}/${PASSWD}@DataBase  
        show user;  
        exit;
EOF
        break  
   elif [ $ANSWER = 'n' ]  
   then  
        break  
   fi
done
echo $ANSWER
于 2013-06-24T11:18:03.070 に答える