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

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

(0)

大家都在看

  • Linux 进程卡住了怎么办?

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年9月10日
    0259
  • Java 求解自幂数(水仙花数)

    什么是自幂数 如果在一个固定的进制中,一个 n 位自然数等于自身各个数位上数字的 n 次幂之和,则称此数为自幂数。 例如:在十进制中,153 是一个三位数,各个数位的3次幂之和为 …

    Linux 2023年6月6日
    048
  • 系列文章分类汇总

    尤娜系列 从前,有一个简单的通道系统叫尤娜…… 尤娜系统的第一次飞行中换引擎的架构垂直拆分改造 四种常用的微服务架构拆分方式 尤娜,我去面试了 专业课回顾 …

    Linux 2023年6月14日
    041
  • ubuntu上挂载硬盘

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月26日
    0142
  • ubuntu-notepadqq安装

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月26日
    0227
  • git 库迁移后ssh失效的处理方法

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月30日
    0221
  • MySQL实现备份案例(2)

    案例1:MySQL8.0实现数据库冷备份和还原 10.0.0.10 — MySQL8.0 #停止数&a…

    Linux 2023年6月7日
    045
  • 巧用 JuiceFS Sync 命令跨云迁移和同步数据

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月8日
    0170
  • shell中 $() $(()) $[] ${} $[[]] 区别

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年9月14日
    0197
  • pip安装依赖于github的第三方库

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月30日
    0298
  • Google Drive, Onedrive, Dropbox green check marks missing; 修复 google 硬盘,同步符号错误

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年11月7日
    0178
  • 学习一下 SpringCloud (二)– 服务注册中心 Eureka、Zookeeper、Consul、Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)– 从单体架构到微服务架构、代码拆分(maven 聚合): https://www.cnblogs.com/l-y…

    Linux 2023年6月11日
    049
  • Linux中添加新硬盘后对硬盘的分区以及挂载

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月20日
    0162
  • Redis分布式锁的使用与实现原理

    模拟一个电商里面下单减库存的场景。1.首先在redis里加入商品库存数量。 2.新建一个Spring Boot项目,在pom里面引入相关的依赖。 <dependency&gt…

    Linux 2023年5月28日
    055
  • [转帖]shell 学习之for语句

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年9月14日
    0162
  • 更快的网络文件系統 — Oxfs

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Linux 2022年8月20日
    0189
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球