从UNIX Shell脚本调用SQL*PLUS并打印有关查询的状态消息

从UNIX Shell脚本调用SQL*PLUS并打印有关查询的状态消息,sql,unix,sh,Sql,Unix,Sh,我想使用shell脚本运行一个SQL代码,并返回消息,不管SQL查询是否成功执行。为此,我使用了下面给出的unix脚本 #!/bin/sh sqlplus -S hr/hr@xe<<EOF @emp.sql EOF var1=$(cat /cygdrive/d/scripts/output.txt | grep -c 'COUNT') if [ $var1 -ge 1 ]; then echo "success" else echo "failu

我想使用shell脚本运行一个SQL代码,并返回消息,不管SQL查询是否成功执行。为此,我使用了下面给出的unix脚本

#!/bin/sh          

sqlplus -S hr/hr@xe<<EOF

@emp.sql

EOF

var1=$(cat /cygdrive/d/scripts/output.txt | grep -c 'COUNT')

if [ $var1 -ge 1 ];

then

echo "success"

else

echo "failure"

fi

exit;
当我执行脚本时,我得到的输出是

COUNT(*)
----------
   107
./script1.sh: line 13: syntax error: unexpected end of file.

我不知道我应该把EOF声明放在哪里。此外,我没有得到状态消息,无论它是成功还是失败,我希望作为输出。请帮忙。提前感谢

SPOOL D:\scripts\output.txt
这不是windows引用文件的方式,在shell脚本中,您将该文件称为
/cygdrive/D/scripts/output.txt
。我假设您正在使用LinuxShell执行,所以我执行了您的脚本,更改了sql文件中的spool行。它工作得很好


编辑:对于假脱机的
output.txt
路径,您使用的
\
也将导致sqlplus终止。因此出现了错误
第13行:语法错误:意外的文件结尾。
可能会在路径中添加引号,或者使用与shell相同的文件路径

我不是bash专家,但我看到了一个额外的
在这一行:
如果[$var1-ge 1]。同时,
退出
后面跟着
和…
没有什么意义。谢谢你的回答。我没有使用linux shell。我在Windows中使用的是模拟unix终端的Cigwin终端。它在PuTTY中运行良好。@user3787299哦,你在发帖中没有提到这一点。我没有使用Cygwin,但是由于您正在打开sqlplus会话,也许您不应该在cygdrive挂载之外引用emp.sql中的output.txt文件。我用另一个观察结果编辑了答案
COUNT(*)
----------
   107
./script1.sh: line 13: syntax error: unexpected end of file.