Shell bash脚本查询Mysql并简单处理查询结果

最近上线新功能需要初始化数据,上线前写好对应的刷数据接口,上线后由于部分数据错误导致调用异常。如果修复好后,还要再发布一次解决问题。作为只用一次的代码,反复发布很麻烦。这时,突然想起tombkeer大神微博里分享的PPT,能用工具用工具、能用脚本就不要用编译语言。因此,现学现卖一下shell脚本做简单的数据处理。

工作中很少自己写shell脚本,细节比较多,把这次学习的成果记下来,供日后查阅。

tombkeeper 大神分享的PPT
#!/bin/bash
#author bollenv@qq.com 2018-02-05
#查询数据库并将查询结果做参数发送HTTP请求
#SQL查询结果列数
columnNum=2
#通过参数行数和行索引位置
function getValue(){
  #调用方法传入的第一个参数,$0 表示方法名
  colIndex=$1
  #调用方法传入的第二个参数
  rowIndex=$2
  #定位到指定行,数组索引0为第一个元素
  #数学算术运算使用 $((a+b))
  idx=$(($columnNum*$colIndex+$rowIndex-1))
  #判读索引值是否大于结果行数
  #${#arrays_name[@]}获取数组长度
  if [ $idx -le ${#user_attrs[@]} ]; then
    echo ${user_attrs[$idx]}
  fi
}
#数据库查询结果,结果为每行从左到右每个单元格为一行(首行为SQL查询结果的列名)
#数组默认分割符号是空格,当查询结果中包含空格字符时,会导致一个字段被分割开,例如:create_time 2017-01-01 12:12:12 会变成两条 
#2017-01-01
#12:12:12
#因此,IFS=$'\t'采用tab来分割字段的值
#mysql -u 用户名 -p 密码 -h 主机host 数据库名 -e 执行脚本内容
IFS=$'\t'
user_attrs=(`mysql -udb_user -pdb_pwd -hdb_host dbname -e 'SELECT \`city_name\`,\`name\` FROM t_user"'`)
#循环遍历查询结果行数
for (( i=$columnNum; i<=${#user_attrs[@]}; i=i+1))
do
   #查询结果name为参数name的值,name为第二列,rowIndex传入 2
   #调用方法需要用``包上
   name=`getValue $i 2`
   #查询结果city_name为city_name的值,city_name为第一列,rowIndex传入 1
   city_name=`getValue $i 1`
   #url中含有大括号时需要转义
   url="https://api.yourdomain.com/api/register?params=\{\"name\":\"$name\",\"city_name\":\"$city_name\"}"
   echo $url
   result=$(curl -X GET $url)
   echo $result
   sleep 0.8
done
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容