如何在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

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

  • 在单引号周围添加双引号
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
    "text": {
         "content": "'"测试$mailsubject"'"
    }
  }'
}

那么正确的代码如下:

#!/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=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
    "text": {
         "content": "'"测试 ${mailsubject}\n ${mailbody}"'"
    }
  }'
}

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

结果:

image-20210723163740961

从最后的结果能看出来,已经成功的将值传过来了,完事!

参考链接

Original: https://www.cnblogs.com/98record/p/ru-he-zaishell-jiao-ben-zhong-chuan-bian-liang-de.html
Author: 自在拉基
Title: 如何在shell脚本中传变量的值传给curl

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644323/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • webssocket简介-服务器可以主动传送数据给浏览器

    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以…

    技术杂谈 2023年5月31日
    0100
  • 每天一个 HTTP 状态码 205

    205 Reset Content 表示服务器成功地处理了客户端的请求,要求客户端… 205 Reset Content 205 Reset Content 表示服务器…

    技术杂谈 2023年7月11日
    062
  • 多线程

    public class 多线程 { static boolean flag = true; static class t1 implements Runnable{ @Overr…

    技术杂谈 2023年7月23日
    069
  • 什么?Android上面跑Linux?

    前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Android、Linu…

    技术杂谈 2023年7月11日
    078
  • 编程语言 = 类型系统 + 运行时

    编程语言 = 类型系统 + 运行时 类型系统 = 描述能力 + 对象模型 + 类型修饰符 + 结合能力 运行时 = 动态派发 + 内存管理 cpu 描述 : 线程 、 算法 、异常…

    技术杂谈 2023年5月31日
    092
  • SmartThings物联网平台简介

    SmartThings是一个智能设备控制系统,它包括:SmartThings Cloud(云平台)、SmartThings Hub(网关)、SmartThings Mobile(手…

    技术杂谈 2023年5月31日
    088
  • 基础前缀和和差分

    前缀和用于在O(1)的时间内求某一给定的数组的其中任意长度的和,它其实就是对一给定了的数组计算得出一个前缀和数组,再利用这个计算出来的数组去求某一段的和 例题链接 #include…

    技术杂谈 2023年6月21日
    094
  • 肩膀疼的几种可能肩周炎和肩袖损伤

    病情分析:他们的鉴别主要是通过手法来实现的,首先可以叫患者主动的进行肩关节外展和后伸的动作,这时候 肩周炎和肩袖损伤的患者都会产生疼痛和活动受限。肩周炎的患者主被动活动,没有明显的…

    技术杂谈 2023年5月31日
    084
  • Crossref是什么?Crossref怎么查DOI?

    参考文献在学术写作中具有极为重要的地位,原因有三。 首先,科研人员的学术影响力或水平通常用发表论著的数量和质量来衡量,而质量往往依靠被引用的次数来表征,虽然引用次数并不能完全代表学…

    技术杂谈 2023年5月30日
    0129
  • 上海市税务局服务 All In One

    上海市税务局服务 All In One https://shanghai.chinatax.gov.cn/bsfw/ https://shanghai.chinatax.gov.c…

    技术杂谈 2023年6月1日
    097
  • 氨基酸分子结构和原子命名

    技术背景 在前面的一篇文章中,我们讲述了蛋白质的组成结构,一共是20种氨基酸。由这20种氨基酸的排列组合,可以得到一条相应的蛋白质链,而这条蛋白质链经过各种螺旋和折叠,会得到一个最…

    技术杂谈 2023年7月25日
    073
  • mac 文本处理命令分享

    2 awk awk ‘{pattern + action}’ {filenames} awk是在每行处理文本的时候,默认按照空格隔离每一个域,对每一个域做处理。也可以直接通过在aw…

    技术杂谈 2023年7月24日
    0119
  • Centos7 中安装Elasticsearch

    1.1 下载elasticsearch 7.13.3 curl -L -O https://artifacts.elastic.co/downloads/elasticsearch…

    技术杂谈 2023年7月24日
    057
  • 一篇文章带你全面读懂Android Backup

    前言 手机等智能设备是现代生活中的重要角色,我们会在这些智能设备上做登录账户,设置偏好,拍摄照片,保存联系人等日常操作。这些数据耗费了我们很多时间和精力,对我们而言极为重要。 如果…

    技术杂谈 2023年7月11日
    075
  • 57.如果有一天我变得很有钱

    dsfds posted @2022-09-28 08:32 随遇而安== 阅读(8 ) 评论() 编辑 Original: https://www.cnblogs.com/55z…

    技术杂谈 2023年6月21日
    067
  • C# List分组

    csharp;gutter:true;//分组 8个为一组List> ArrayList = sArray.Select((x, i) => new { Index =…

    技术杂谈 2023年5月30日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球