shell脚本 - 需要按照上面的输出发送邮件到特定的id

时间:2015-03-21 20:00:43

标签: linux bash shell email

以下脚本用于杀死在登录节点中运行作业的PID(占用更多内存)。同时我们需要向用户发送邮件,告知你的工作被杀死了。我们有用户ID列表& s&邮件ID

需要帮助以管理邮件ID发送特定用户cc的邮件。

示例用户ID& s&文件

中的等效邮件ID
apple       apple@gmail.com
mango       123@ymail.com
cat        cat@hotmail.com 
etc...

示例脚本

[root@localhost ~]# cat test_script.in
#!/bin/sh
 output=$(ps axu | awk -v OFS='\t'  '{print $1, $2, $3, $4, $11}' | sort -k4 -nr |head -5| awk '{print $2}'| awk 'NR==2')
 user=$(ps axu | awk -v OFS='\t'  '{print $1, $2, $3, $4, $11}' | sort -k4 -nr |head -5| awk '{print $1}'| awk 'NR==2')
 details=$(ps axu | awk -v OFS='\t'  '{print $1, $2, $3, $4, $11}' | sort -k4 -nr |head -5| awk '{print $5}'| awk 'NR==2')
 kill -9 $output
 msg="Hi $user \n you are running jobs in login nodes\n process id $output \n job details $details"
 echo -e $msg |mail -s "pls dont run jobs in login nodes" XXXXXXX ## need help here###
[root@localhost ~]#}
你可以帮助我们,

1 个答案:

答案 0 :(得分:0)

以下for / done循环行可以在bash和sh中同时输入一行的用户/地址行。

但是,我在这里显示的用户和电子邮件解析行只能在bash中使用。如果您不想使用bash,如果需要将行拆分为用户和电子邮件,可以用awk替换它们。

for n in `cat emails_addresses.txt`; do {
     user=${n## *}
     email=${n%%* }
     # 
     # send e-mail using $email here
     #
done

如果你使用我在bash中显示的字符串删除功能,请注意*之前的空格和一行中的*之后的空格。星号' *'是一个通配符,上面的行分别从字符串的开头和结尾删除指示的模式,以产生用户和电子邮件。