2012-08-09 18 views
7
echo "Total items: `echo $QUERY1 | awk '{print $1}'`" 
echo "Total Error: `echo $QUERY1 | awk '{print $2}'`" 
echo "Percentage: $QUERY2" 

Tôi có thể gửi ba điều này trong một email bằng cách sử dụng mail command. Vì vậy, cơ thể email nên như thế này dưới bất cứ khi nào tôi nhận được bất kỳ email, trong mỗi dòng cần có một tiếng vang Câu lệnhĐường ống đầu ra từ ba tuyên bố echo vào thư

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

Tôi đang chạy SunOS

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

Bạn không thể đưa nó vào tệp tmp và chỉ cần nhấn vào đó? –

+0

tất cả các câu lệnh echo này đều có trong kịch bản lệnh shell của tôi và từ kịch bản lệnh shell đó, tôi chỉ cần truyền ba câu lệnh echo này trong một email duy nhất. – AKIWEB

+0

có thể trùng lặp của [Gửi email đến nhóm email bằng cách sử dụng tập lệnh shell] (http://stackoverflow.com/questions/11875036/send-an-email-to-a-email-group-using-shell-script) – tripleee

Trả lời

15

yêu cầu của bạn không hoàn toàn rõ ràng, nhưng cố gắng này

{ 
    echo "Total items: `echo $QUERY1 | awk '{print $1}'`" 
    echo "Total Error: `echo $QUERY1 | awk '{print $2}'`" 
    echo "Percentage: $QUERY2" 
} | mail -s "subject" [email protected],[email protected] 

các { .. } cặp tạo ra một nhóm quá trình, và tất cả std-đầu ra được chuyển hướng vào 1 | (đường ống), kết nối với chương trình thư của bạn.

Bạn có thể cần sử dụng mailx, -s chỉ định chủ đề mà tôi thấy từ câu hỏi khác của bạn về chủ đề này mà bạn có vẻ hiểu.

Ngoài ra sendmail sẽ cần phải chạy và được định cấu hình đúng cách cho bất kỳ thư nào được gửi từ máy mà bạn thực thi tập lệnh này.

IHTH


Chỉnh sửa: 2015-11-07

Chỉ cần có một ngôi sao 'câu trả lời đẹp' cho điều này, và trên trên xem xét, Tôi ngạc nhiên mà tôi đã không nhận xét về việc sử dụng quá nhiều quy trình. Đối với trường hợp này, điều này có thể được giảm đến một cuộc gọi đến awk, tức là

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" [email protected],[email protected] 

Hoặc cho đám đông một liner ;-), đó là

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" [email protected],[email protected] 

Các { .. } không cần thiết trong việc này trường hợp, vì chỉ có một quá trình kết nối với đường ống.

Đối với trường hợp như báo cáo tóm tắt được gửi mỗi ngày một lần, mã ban đầu hoàn toàn có thể sử dụng được (nhưng không tối ưu). Tuy nhiên, mã hóa không tối ưu dẫn đến thói quen xấu. Gọi 5 quá trình khi một trong những sẽ đủ trong một vòng lặp chạy 1000 lần trong một ngày, sẽ tiêu thụ tài nguyên tính toán không cần thiết.

Cuối cùng, như là o.p. không bao gồm bất kỳ dữ liệu mẫu nào, mã chỉ được kiểm tra một cách nhẹ nhàng.

1

Chỉ cần tạo một hàm trong bash và | (đường ống) nó để sendmail.

  #!/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" [email protected] 
+0

cũng vậy. Chúc mọi người may mắn. – shellter