2012-08-09 151 views
1

下面是我的shell脚本工作正常。使用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脚本,我得到以下三件事情从上三个回声陈述 -

Total items purchased 
Total Items MissingorMismatch 
Error Percentage 

我需要将以上三件事通过电子邮件发送到我们的电子邮件组,我们有[email protected]上面使用shell script或假设我有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" [email protected] 
+2

您错过了使用'{'和'}'分组回显语句的部分。 – 2012-08-09 03:31:10

+0

运行第一个查询两次只提取不同的输出字段是什么? – tripleee 2012-08-09 03:42:44

+0

@tripleee,你是什么意思?我无法理解。你能举一些例子说你在说什么吗? – ferhan 2012-08-09 04:28:46

回答

5

您通常使用/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" [email protected] 

也可通过管道现有脚本的输出到mail(如果你不想修改脚本,或者如果你只是想somtimes发送邮件):

<your script> | mail -s "Test Data" [email protected] 

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

... | mail -s "Test Data" [email protected] [email protected] 

等等。

+0

谢谢你的建议,但它让我更困惑。你能否为我提供所有案例的准确代码,然后我可以理解更多,因为我是shell脚本的新手。所以我在理解语法和所有其他方面都很困惑。 – ferhan 2012-08-09 01:23:25

+0

我用我试过的脚本更新了这个问题,但是我只收到了电子邮件中的最后一个回声声明。 – ferhan 2012-08-09 01:34:49

+0

示例代码在'|'之前缺少结束'}'字符焦炭。看到我的答案http://stackoverflow.com/users/819916/nevzz03。你们是在同一个项目上工作吗?还是这个功课? (如果是这样,你应该这样标记)。否则,请协调你的问题,而不是多次询问同一件事。祝你好运。 – shellter 2012-08-09 02:38:26