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。