我是shell编程的新手。我有两个文件:
- 例如.txt
- file.sh
例如.txt文件有一些HTML内容,file.sh 包含一个shell脚本。在脚本中,将值分配给temp
变量,该值应注入到 HTML 文件中。
例如.txt
<html>
Hi MGM ,<br/>
One alert has been received !!<br/>
Here is the event Data.<br/><br/>
<font size=‘1’>{temp}</font>
<br/><br/>
Regards,
WDTS Supports.
</html>
file.sh
echo $1
temp=56
(
echo "To:"$1
echo "Subject: Alert Updates !! "
echo "Content-Type: text/html"
echo cat eg.txt
) | /usr/sbin/sendmail -t
echo "Mail sent !!"
带 sed :
sed "s/{temp}/$temp/" eg.txt | /usr/sbin/sendmail -t
您还可以使用 printf
在模板中注入变量:
file.sh
temp=56
tpl=$(cat "eg.txt")
printf "$tpl" "$1" "$temp" | /usr/sbin/sendmail -t
例如.txt
To:%s
Subject: Alert Updates !!
Content-Type: text/html
<html>
Hi MGM ,<br/>
One alert has been received !!<br/>
Here is the event Data.<br/><br/>
<font size=‘1’>%s</font>
<br/><br/>
Regards,
WDTS Supports.
</html>
更新:
如果有多个变量,只需编写多个替换命令(并更新占位符,例如.txt):
sed "s/{temp1}/$temp1/;s/{temp2}/$temp2/" eg.txt | /usr/sbin/sendmail -t
我已经为您的代码引入了一些错误检查:
#!/bin/bash
temp=56
if [ -z "$1" ]
then
echo "Usage : ./file.sh user_name_to_mail to"
exit -1
else
if id "$1" >/dev/null 2>&1 #Check if user exists, suppress stdout, stderr
then
mail_header=$(echo -e "To: $1nSubject: Alert Updates"'!!'"nContent-Type: text/htmln")
mail_body=$(awk -v var="$temp" '{print gensub(/{temp}/,var,"g"$0)}' eg.txt)
echo -e "$mail_headern$mail_body" | sendmail -t
else
echo -e "Sorry! Invalid Usern"
exit -1 # The error code is set to detect failure
fi
fi
为了防止邮件成为垃圾邮件,您需要为发送电子邮件的域提供有效的 SPF 记录。检查 [ this ] 以获取起点。
注意:
!
bash 的特殊字符,它用于指代前面的命令。为了解决这个问题,我使用了..Updates"'!!'"nContent-Type..
.
在单引号内,!
失去了其特殊含义。
有趣的阅读:
- 什么是 [ SPF ] 记录?
- 打开 SPF [ 文档 ]。
echo $1
temp=56
(
echo "To:"$1
echo "Subject: Alert Updates !! "
echo "Content-Type: text/html"
awk -F "" -v var=$temp '{gsub(/{temp}/,var,$0); print}' < eg.txt
) | /usr/sbin/sendmail -t
echo "Mail sent !!"
将 awk 添加到 '|' 中,其中温度存储在 awk 变量中:var 后来被替换
awk -F "" -v var=$temp '{gsub(/{temp}/,var,$0); print}'