0

因为我是 unix 脚本的新手。我在 ASE ISQL 中运行 SQL 语句,如果 SQL 语句给出了一些结果,那么我需要将该结果邮寄给特定用户。如果 SQL 没有返回任何结果,则不应发送邮件。
我写的示例脚本是:

#!/bin/ksh
isql -U$DBO -S$DSQUERY -D$DBNAME -P$PASSWORD << END 
go
select * from 'Table'
go
if (@@rowcount !=0)

mailx -s "Hello" XYZ@gmail.com 


END

请让我知道我哪里出错了?

4

1 回答 1

0

我认为您需要将SQL的输出捕获到一个shell变量中,然后在发送电子邮件之前测试结果,大致如下:

#!/bin/ksh
num=$(isql -U$DBO -S$DSQUERY -D$DBNAME -P$PASSWORD << END 
select count(*) from 'Table'
go
END
)

if [ "$num" -gt 0 ]
then mailx -s "Hello" XYZ@gmail.com < /dev/null
fi

我假设isql程序只会打印数字而不是任何标题或其他信息。如果它更冗长,那么您必须进行更敏感的测试。

还要注意,这COUNT(*)比“选择所有内容并计算有多少行”版本更快、更准确。


实际上我的问题是,如果我的 SQL 语句返回任何结果,那么只有该结果集应该通过邮件发送。

然后我会使用:

#!/bin/ksh
tmp=${TMPDIR:-/tmp}/results.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15

isql -U$DBO -S$DSQUERY -D$DBNAME -P$PASSWORD << END > $tmp
select * from 'Table'
go
END

if [ -s $tmp ]
then mailx -s "Hello" XYZ@gmail.com < $tmp || exit 1
fi
rm -f $tmp
trap 0
exit 0

这会将结果捕获到一个文件中。如果文件不为空 ( -s),则它将文件作为电子邮件正文发送。请换个更有意义的话题。另外,您确定将公司电子邮件发送到 Gmail 帐户是个好主意吗?

于 2011-09-29T16:00:39.347 回答