Shell脚本实现数据库查询、更新及POST接口调用

Shell脚本实现数据库查询、更新并根据查询结果调用服务接口

#!/bin/bash
# 数据库连接信息
DB_HOST="数据库的 IP 地址"
DB_PORT="数据库的端口号"
DB_USER="数据库的用户名"
DB_PASSWORD="数据库的密码"
DB_NAME="数据库的名称"
LOG_PATH="日志输出地址,也可以直接打印控制台"
# 查询最新的 mode 表数据,按 auth_no 分组,并取每组中 gmt_create 最大的那一条记录
query="SELECT auth_no, corp_id FROM mode WHERE (auth_no, gmt_create) IN (SELECT auth_no, MAX(gmt_create) FROM mode GROUP BY auth_no)"
#以一条数据为例,results 输出内容是两行,第一行为字段名,所以query尾部添加  | tail -n+2 从第二行开始
results=$(mysql -u $DB_USER -p$DB_PASSWORD -D $DB_NAME-N -B -e "$query" | tail -n+2)

# 遍历查询结果
initNum=400168
while read -r line; do
  # 从查询结果中获取 corpId和 authNo
  corpId=$(echo "$line" | awk '{print $2}')
  authNo=$(echo "$line" | awk '{print $1}')
  
  # 更新表中的 auth 字段
  mysql -u $DB_USER-p$DB_PASSWORD -D $DB_NAME-e "UPDATE mode SET auth = $aaa WHERE corp_id = '$corpId' AND auth_no = '$authNo'"
  
  #判断corpId是否有值
  if [[ -n $corpId ]]; then 
  	#组装JSON报文
    json='{"ctrlData":{"corpId":"'${corpId}'"}}'
    response=$(curl -X POST -H "Content-Type: application/json" -d "$json" http://your-api-url.com)
    #可用来解析相应报文头数据
    #code=$(echo $response | jq -r '.respData.code')
    #message=$(echo $response | jq -r '.respData.message')
  
    #if [ "$code" = "00000000" ]; then
    #  echo "调用成功"  >> "$LOG_PATH"
    #else
    #  echo "调用失败,错误信息:$message"  >> "$LOG_PATH"
    #fi
	if [ $? -eq 0 ]; then
		echo "调用成功"  >> "$LOG_PATH"
	else
		echo "调用失败,corp_id: $corpId" >> "$LOG_PATH"
	fi
fi
  
  # initNum自增 1
  ((initNum++))
done <<< "$results"

同理:也可以从本地文件读取内容,执行数据库更新和接口调用

#!/bin/bash
DB_HOST="数据库的 IP 地址"
DB_PORT="数据库的端口号"
DB_USER="数据库的用户名"
DB_PASSWORD="数据库的密码"
DB_NAME="数据库的名称"
FILE_PATH="文件全路径"
LOG_PATH="日志输出地址,也可以直接打印控制台"
# 读取文件内容
initNum=123
#注意:文件结尾需要加上空行,反正我在实际文件处理中结尾没有空行,导致最后一条数据没有获取到,具体原因没找
while read line; do
  # 过滤空行
  if [ -n $corpId ] && [ -n $authNo]; then
  	#数据示例: A20200403=0001
    # 获取corpId和authNo  最好不用 "-"作为分隔符,好像解析不出来,可能符号比较特殊
    corpId=$(echo "$line" | cut -d "=" -f 1)
    authNo=$(echo "$line" | cut -d "=" -f 2)

    # 更新表中的 auth 字段
    mysql -u username -p'password' -D database -e "UPDATE mode SET auth = $aaa WHERE corp_id = '$corpId' AND auth_no = '$authNo'"

      #组装JSON报文
      json='{"ctrlData":{"corpId":"'${corpId}'"}}'
      # 调用API接口
      response=$(curl -s -X POST -H "Content-Type: application/json" -d "$json" http://your-api-url.com)
      if [ $? -eq 0 ]; then
		echo "调用成功"  >> "$LOG_PATH"
	  else
		echo "调用失败,corp_id: $corp_id " >> "$LOG_PATH"
	  fi
	  
    # initNum自增 1
    ((initNum++))
  fi
done < "$FILE_PATH"


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值