ebs主机类型的请求中shell脚本调用sql+mutt发送邮件
ebs主机类型的请求可以查看我上一篇博客
最近有一个任务是要实现将服务器上的文件以发附件形式发邮件给用户。不知道怎么组织语言,直接上代码
我这边ebs前台会传过来一个参数,我需要根据这个参数查询出数据(收件人),收件人我是用表结构存放的,然后发邮件
retval=$(sqlplus -S "$1" <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT pucif.VALUE p_value
FROM pay_user_tables put,
pay_user_columns puc,
pay_user_rows_f purf,
pay_user_column_instances_f pucif
WHERE put.user_table_id = puc.user_table_id
AND put.user_table_id = purf.user_table_id
AND pucif.user_row_id= purf.user_row_id
AND pucif.user_column_id = puc.user_column_id
AND put.user_table_name ='$7';
EXIT
EOF)
/usr/local/bin/mutt -e "set charset=utf-8 from=xxx@xxx.com content_type=text/html" -s "邮件主题" $retval -a 文件路径/文件名称<xxx.html
1.$1是主机类型的并发请求中的参数1,即用户名/密码。
2.$7是前台传过来的一个参数
3.xxx.html 是邮件的正文
4.$retval 就是sql查询出来的结果
关于如何获取命令的输出内容
在shell脚本中我们有时需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。比较常用的一种方式就是采用反向单引号的方式
– 保存结果的变量名=`需要执行的linux命令`
但是推荐使用 保存结果的变量名=`需要执行的linux命令 2>&1 `的方式来获取命令的执行结果
具体原因可参考如下链接:
shell 脚本中获取命令的输出
5.$() 与``作用一样
6.EOF 实现执行sql,输出结果
在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。其使用形式如下:
交互式程序(命令)<<EOF
command1
command2…
EOF