• Shell操作服务器,数据库的常用表达语句以及jq工具的使用


    最近写后台脚本经常用到shell脚本来进行服务器的指令或者连接数据库获得结果集,而且也通过curl指令发请求获得Json结果处理,所以这里总结一下经常用到的语句方便以后自己查询使用。

    1.单单执行Linux命令:你在Linux下怎么敲代码这里就怎么敲

    读取文件内容的每一行:cat temp.log|while read line

               do

                 some code;

               done  

    直接将数据库查询结果打印到屏幕:$almysql -N -e"select * from $DB.$TABLE"

    (其中$almysql为连接数据库的配置语句,almysql="mysql -h**** -u*** -p*** -P*** --default-character-set=utf8")

    或者 echo "select * from $DB.$TABLE"|$almysql $DB -N 

     

    把数据库查询结果写入到文件,其中>为清空当前文件再写入内容,而>>则是不断在该文件结尾追加内容。

    $almysql -N -e"select * from $DB.$TABLE" >temp.txt

    或者 echo "select * from $DB.$TABLE"|$almysql $DB -N  >temp.txt

    执行Python 文件直接python temp.py

     

    2.把命令的结果值赋予一个变量:此时一定要用``符号(ESC下方)包起来,也就是说除去``符号,里面的语句可以直接在Linux下执行

    时间赋给$today :  today=`date "+%Y-%m-%d %H:%M:%S"`

    数据库结果赋给$count: count=`echo "select count(*) from $DB.$TABLE"|$almysql $DB -N`

    某个文件的行数赋给$count:count=`cat temp.log|wc -l`

    read line时读取文件每一行的第一列,第二列,并以|为分隔符:

    first=`echo $line|awk -F'|' '{printf("%s",$1)}'`

    second=`echo $line|awk -F'|' '{printf("%s",$2)}'`

    发送请求的结果返回给某个变量: response=`curl "http://api.map.baidu.com/........."`

     

    3.使用jq直接对Json数据处理

    shell脚本的Json处理并没有像Php或者js有直接封装好的函数如json_encode(),json_decode(),所以一般是通过剪裁的方法。所以这里记录一下jq安装及相关使用。

    首先jq是一个命令,在Linux下 执行 jq -h来判断你是否安装了这个工具命令,一般如果没有安装直接去

    https://stedolan.github.io/jq/download/   下载安装包(这边64位系统)

     然后执行 yum install jq-linux64即可。

    安装好后就可以执行jq指令了,详细的API可参考https://stedolan.github.io/jq/tutorial/

    我在发送请求的过程中把回调内容全部赋予一个变量,大概如下:

    res={"status":0,"result":[{"x":1,"y":2}]}

    status=`echo $res|jq '.status'`  ($status=0)

    x=`echo $res|jq '.result[].x'`     (x=1   由于result是个数组所以用result[]才能引用得到,如果是多个数组还可以定义Index 1,2,3,4)

    y=`echo $res|jq '.result[].y'`     (y=2)

     

    如果result不是数组则更加方便

    res={"status":0,"result":{"x":1,"y":2}}

    status=`echo $res|jq '.status'` 

    x=`echo $res|jq '.result.x'`    

    y=`echo $res|jq '.result.y'`    

     

    其实本质上把$res echo一遍就可以看到引用的方式,就上面两种表达方式,结果如下:

    当然这个命令行还有更加强大的筛选功能,需要时可以参考官方API。

  • 相关阅读:
    JUC高并发编程(三)之模拟接口压力测试
    JUC高并发编程(二)之多线程下载支付宝对账文件
    JUC高并发编程(一)之请求合并案例
    《Head First设计模式》读书笔记
    图文详解23种设计模式
    Laravel路由匹配
    深夜debug:一个不常遇到的HbuilderX自动化测试运行问题
    高德地图API中折线polyline不能跨越180度经度线的解决方案
    sublime配置java运行环境
    Docker技术入门
  • 原文地址:https://www.cnblogs.com/martianShu/p/5846316.html
Copyright © 2020-2023  润新知