【问题标题】:Send an email to a email group using shell script使用 shell 脚本向电子邮件组发送电子邮件
【发布时间】:2012-08-09 00:11:39
【问题描述】:

下面是我运行良好的 shell 脚本。

#!/bin/bash

DATE_YEST_FORMAT2=`perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*96);'`
echo $DATE_YEST_FORMAT2

QUERY1=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';`

QUERY2=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"`

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

我正在像下面这样运行上面的 shell 脚本-

sh -x test.sh

问题陈述:-

从上面的 shell 脚本中,我从最后三个 echo 语句中得到以下三件事-

Total items purchased
Total Items MissingorMismatch
Error Percentage

我需要通过使用上面的shell script 将以上所有这三件事通过电子邮件发送到我们有DL-host@company.com 的电子邮件组,或者假设我有10 email list,我需要向其发送具有相同内容的电子邮件和主题,然后我想,我可以将所有这 10 封电子邮件列表存储在某个变量中,然后从那里读取并继续发送,对吗?这有可能做到吗?我在想像下面这样的电子邮件结构,只是做的很简单。

主题

测试数据

邮件正文

Total items purchased:-    Some Number
Total Items MissingorMismatch:-   Some Number
Error Percentage:-   Some Number

任何想法将不胜感激。

更新,在尝试了 larsks 的建议后,我只收到一封电子邮件中的最后一个 echo 语句,这意味着只有错误百分比一个,而不是一封电子邮件中的所有三个:-

#!/bin/bash

DATE_YEST_FORMAT2=`perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*96);'`
echo $DATE_YEST_FORMAT2

QUERY1=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';`

QUERY2=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"`

echo "Total items purchased: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "Error Percentage: $QUERY2" | mail -s "Test Data" rj@host.com

【问题讨论】:

  • 你错过了他使用 {} 对 echo 语句进行分组的部分。
  • 运行第一个查询两次只是为了提取不同的输出字段是什么?
  • @tripleee,你是什么意思?我无法理解。你能举个例子吗?
  • 完全避免反引号,运行hive ... query 1 text ... | awk '{ print "Total Items Purchased" $1; print "Total Items Missing or Mismatch:" $2 }'。总的来说,为了echoing 输出而大量过度使用反引号; echos 不优雅,在某些情况下有问题。

标签: linux email shell unix solaris


【解决方案1】:

您通常使用/bin/mail 程序从shell 脚本发送电子邮件。您在命令行上提供主题和收件人,在 stdin 上提供邮件正文。例如,在您的脚本中,您可以执行以下操作:

{
echo "Total items purchased: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "Error Percentage: $QUERY2"
} | mail -s "Test Data" DL-host@company.com

您还可以将现有脚本的输出通过管道传输到mail(如果您不想修改脚本,或者只想偶尔发送邮件):

<your script> | mail -s "Test Data" DL-host@company.com

你可以在命令行中指定多个收件人,所以:

... | mail -s "Test Data" address1@company.com address2@company.com

等等。

【讨论】:

  • 感谢 larsks 的建议,但这让我更加困惑。您能否为我提供所有案例的确切代码,然后我可以理解更多,因为我是 shell 脚本的新手。所以我对理解语法和所有其他事情很困惑。
  • 我根据您的建议使用我尝试过的脚本更新了问题,但我在电子邮件中只收到了最后一条回显语句。
  • 示例代码在 '|' 之前缺少一个结束 '}' 字符字符。请参阅我对 stackoverflow.com/users/819916/nevzz03 的回答。你们是在做同一个项目还是这个功课? (如果是这样,你应该这样标记它。)否则,请协调你的问题,而不是多次问同样的事情。祝你好运。
  • 您也可以使用read v1 v2 &lt;&lt;&lt; $QUERY1 而不是两个单独的echo|awk 调用。
  • @glennjackman,我没听懂你在说哪一部分?
猜你喜欢
  • 2010-12-19
  • 2011-09-16
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2012-06-11
相关资源
最近更新 更多