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。

原文地址:https://www.cnblogs.com/martianShu/p/5846316.html