Shell脚本遍历数据表DataSet

  以下为shell脚本编写的查询Mysql数据库并遍历取值的脚本,更多问题请搜索  “shell for循环 处理数据表”。

 1 #!/bin/bash
 2 #author bollenv@qq.com 2018-02-05
 3 #查询数据库并将查询结果做参数发送HTTP请求
 4 #SQL查询结果列数
 5 columnNum=2
 6 #通过参数行数和行索引位置
 7 function getValue(){
 8   #调用方法传入的第一个参数,$0 表示方法名
 9   colIndex=$1
10   #调用方法传入的第二个参数
11   rowIndex=$2
12   #定位到指定行,数组索引0为第一个元素
13   #数学算术运算使用 $((a+b))
14   idx=$(($columnNum*$colIndex+$rowIndex-1))
15   #判读索引值是否大于结果行数
16   #${#arrays_name[@]}获取数组长度
17   if [ $idx -le ${#user_attrs[@]} ]; then
18     echo ${user_attrs[$idx]}
19   fi
20 }
21 #数据库查询结果,结果为每行从左到右每个单元格为一行(首行为SQL查询结果的列名)
22 #数组默认分割符号是空格,当查询结果中包含空格字符时,会导致一个字段被分割开,例如:create_time 2017-01-01 12:12:12 会变成两条 
23 #2017-01-01
24 #12:12:12
25 #因此,IFS=$'\t'采用tab来分割字段的值
26 #mysql -u 用户名 -p 密码 -h 主机host 数据库名 -e 执行脚本内容
27 IFS=$'\t'
28 user_attrs=(`mysql -udb_user -pdb_pwd -hdb_host dbname -e 'SELECT \`city_name\`,\`name\` FROM t_user"'`)
29 #循环遍历查询结果行数
30 for (( i=$columnNum; i<=${#user_attrs[@]}; i=i+1))
31 do
32    #查询结果name为参数name的值,name为第二列,rowIndex传入 2
33    #调用方法需要用``包上
34    name=`getValue $i 2`
35    #查询结果city_name为city_name的值,city_name为第一列,rowIndex传入 1
36    city_name=`getValue $i 1`
37    #url中含有大括号时需要转义
38    url="https://api.yourdomain.com/api/register?params=\{\"name\":\"$name\",\"city_name\":\"$city_name\"}"
39    echo $url
40    result=$(curl -X GET $url)
41    echo $result
42    sleep 0.8
43 done

 

参考:

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

posted @ 2019-12-13 09:47  傍风无意  阅读(1442)  评论(0)    收藏  举报