10
echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
echo "Percentage: $QUERY2"

How can I send these three things in a single email using mail command. So the mail body should be like this below whenever I get any email, in each line there should be one echo statement-

Total items:-    Some Number
Total Error:-   Some Number
Percentage:-   Some Number

I am running SunOS

bash-3.00$ uname -a 
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc 
4

2 回答 2

21

您的要求并不完全清楚,但试试这个

{
    echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
    echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
    echo "Percentage: $QUERY2"
} | mail -s "subject" toUser1@xyz.com,toUser2@abc.com

{ .. }对创建一个进程组,所有标准输出都重定向到 1 |(管道),它连接到邮件程序的标准输入。

您可能需要使用mailx,-s指定主题,我从您似乎理解的关于此主题的其他问题中看到。

sendmail需要运行并正确配置从您执行此脚本的机器发送的任何邮件。

IHTH


编辑:2015-11-07

刚刚为此获得了一个“不错的答案”星,在审查时,我很惊讶我没有评论过度使用流程。对于这种情况,这可以简化为对 的一次调用awk,即

awk -v q1="$QUERY1" -v q2="$QUERY2" \
 'END {
    split(q1,q1arr)
    print "Total items: " q1arr[1] \
          "Total Error: " q1arr[2] \
          "Percentage: " q2
}' /dev/null \
| mail -s "subject" toUser1@xyz.com,toUser2@abc.com

或者对于单线人群;-),即

awk -v q1="$QUERY1" -v q2="$QUERY2" 'END {split(q1,q1arr);print "Total items: " q1arr[1] "\nTotal Error: " q1arr[2] "\nPercentage: " q2 }' /dev/null | mail -s "subject" toUser1@xyz.com,toUser2@abc.com

在这种{ .. }情况下不需要,因为只有一个进程连接到管道。

对于像每天发送一次摘要报告这样的情况,原始代码是完全可用的(但不是最佳的)。但是,非最佳编码会导致不良习惯。在一天内运行 1000 次的循环中调用 5 个进程就足够了,这将不必要地消耗计算资源。

最后,由于操作没有包含任何示例数据,因此代码仅经过轻微测试。

于 2012-08-09T02:27:24.057 回答
4

只需在 bash 中创建一个函数,然后 | (管道)它发送邮件。

            #!/bin/bash

            echo_statement(){

            echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
            echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
            echo "Percentage: $QUERY2"

            }
            echo_statement | mail -s "subject" you@yourdomain.com
于 2012-08-09T03:45:59.947 回答