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

您的问题是 shell 需要在行首的 here 文档的分隔符。您的 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 回答