【发布时间】:2019-02-12 11:12:40
【问题描述】:
我必须创建 1 个 UNIX Shell 脚本。在那个 shell 脚本中,我想从同一个目录运行多个 SQL 脚本文件。我是这样用的-
#!usr/bin/ksh
SQLPATH = /usr/sql/
(cd $SQLPATH;
'sqlplus usr/password@sid <<EOF
spool <db_file>.log
@<db_name>.sql
set echo off
set heading off
spool off
&&
spool <db_file2>.log
@<db_name2>.sql
set echo off
set heading off
spool off
&&
spool <db_file3>.log
@<db_name3>.sql
set echo off
set heading off
spool off
exit;
EOF')
exit 0
有多个这样的 SQL 脚本,我必须为每个 SQL 脚本创建日志文件,所以我在这里使用了spool。每个 SQL 脚本文件执行后
我用&&。所以当我定义 PATH 时,在这里和第三行 ; 中使用 && 是否很好。请提供更好的解决方案。
【问题讨论】:
-
单引号是怎么回事? (同样,变量赋值中的
=周围不允许有空格,并且不允许缩进结束heredoc 的EOF)。我看不出您的代码将如何按照当前编写的方式工作。 -
@CharlesDuffy 实际上有大约 20 个 SQL 脚本文件,它们是 3-4 个不同位置的路径,因此在 shell 脚本中经常使用路径我在这里声明变量。这就是我在这里使用
cd的原因。同样在EOF之后,答案中提到的&&的用途是什么。 -
foo && bar是if foo; then bar; fi的简写,即仅当foo成功完成时运行bar。我想这就是你想问的问题——你希望&&在你自己的代码中是什么意思?
标签: shell unix ksh sql-scripts