我遇到了一个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行......)
如果有人知道为什么不想工作,我会非常感谢你的帮助!
答案 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