如何在bash脚本中的循环中执行SQL?

时间:2013-06-24 09:51:24

标签: sql bash loops

我遇到了一个bash脚本的问题,我想在其中执行SQL 作为一个例子,如果我只是写:

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行......)

如果有人知道为什么不想工作,我会非常感谢你的帮助!

1 个答案:

答案 0 :(得分: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