我认为您需要将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 帐户是个好主意吗?