98record

如何在shell脚本中传变量的值传给curl

随着即时通讯的发展,大量的报警媒介已经从以往的邮件转为钉钉,企业微信等聊天工具。当我使用shell脚本来监控Keepalived的时候,在给curl传递变量的时候无法生效,经过查找相关资料有所了解并加以解决,解决方案如下:

解决方案

错误shell代码:


#!/bin/bash
#
notify() {
#mailsubject="$(hostname) to be $1, vipIP 切换成功 "
local mailsubject="$(date +\'%F %T\'):$(hostname) to be $1, vipIP 切换成功 "
local mailbody="$(hostname) 修改成 $1 模式"
#local mailbody="$(date +\'%F %T\'): vrrp transition, $(hostname) changed to be $1"
#echo "$mailbody" | mail -s "$mailsubject" $contact
curl \'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx\' \
-H \'Content-Type: application/json\' \
-d \'{"msgtype": "text", 
    "text": {
         "content": "测试$mailsubject"
    }
  }\'
}

case $1 in
master)
        notify master
        ;;
backup)
        notify backup
        ;;
fault)
        notify fault
        ;;
*)
        echo "Usage: $(basename $0) {master|backup|fault}"
        exit 1
        ;;
esac

结果

image-20210723144722549
image-20210723144722549

通过测试的结果来看,这是典型的没有正确传变量值。通过查找相关资料确认,是因为shell脚本的单引号字符串有所限制,单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。然后在我们这个脚本中,发送钉钉消息,需要传递变量值内容的刚好是在单引号中,也就导致了无法正常传递。那么怎么解决这个问题呢?既然找到问题了,那么解决也简单,我们需要将符号转义即可。方法如下

分类:

技术点:

相关文章:

  • 2021-08-07
  • 2021-12-22
  • 2021-12-19
  • 2022-12-23
  • 2021-10-10
  • 2022-01-18
  • 2021-07-02
猜你喜欢
  • 2021-07-08
  • 2021-12-19
  • 2021-12-19
  • 2021-11-20
  • 2022-02-21
相关资源
相似解决方案