如何替换占位符的值



我是shell编程的新手。我有两个文件:

  1. 例如.txt
  2. 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...

在单引号内,!失去了其特殊含义。


有趣的阅读:

  1. 什么是 [ SPF ] 记录?
  2. 打开 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}'

相关内容

  • 没有找到相关文章

最新更新