shell入门实战
上篇shell实用合集主要是介绍使用shell编程自动打开远程文件夹
本篇章主要介绍shell编程中发送请求和数据解析的实例
在编写过程中,碰到的问题大多都是语法编写上导致的问题,比如空格,换行,大小写之类的。
函数
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
# 函数命名,最长版,建议不要简写
# 使用 %1 进行参数获取
# return的值就是最后被print 出来的值
function test(){
param1=$1
param2=$2
echo $1+$2
}
result=$(test 1 2)
Get请求
发送get请求,curl
的相关参数,可以查阅–help,或是curl 的用法指南
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
TOKEN='asdfasdfasdf'
function getRequest(){
param1=$1
param2=$2
info=$(curl -s -L -X GET \
'https://www.test.com?param1='$param1'¶m2='$param2'' \
--header 'Content-Type: application/json' \
--header 'User-Agent: rambo' \
--header "X-Auth-Token: ${TOKEN}")
}
-s
静音模式,这样就不会有请求的加载进度
-L
参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。
-X
参数指定 HTTP 请求的方法。例如 后面跟GET
,代表是get请求,注意大小写,不然会报错
POST请求
注意post的入参data
的使用,json的拼接字符串参数和数字参数会有区别
拼接字符串需要使用’‘进行包裹
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
TOKEN='asdfasdfasdf'
function postRequest(){
param1=$1
param2=$2
info=$(curl -s -X POST \
'https://www.test.com' \
--header 'Content-Type: application/json' \
--header 'User-Agent: rambo' \
--header "X-Auth-Token: ${TOKEN}"
--data '{"key1":"'${param1}'","key2":"'${param2}'"}')
}
解析json返回数据
可以使用python来进行json解析,当然还有其他的三方包能力可以用
解析json
1
2
3
4
5
6
7
8
9
10
11
12
{
"data": [
{
"testid": 1212,
"str": "abc"
},
{
"testid": 1212,
"str": "abc"
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
function parseJson(){
info=$1
testid=$2
# 注意这里的python脚本的换行问题,要顶头不要留空
result=$(echo $info | python -c "import sys, json;
result=json.load(sys.stdin)['data'];
length=len(result);
strs='';
if length == 0:
print '';
else:
for item in result:
testid=int('${testid}')
if testid > 0 and item['testid'] == testid:
strs=item['str']+';'+strs)
print strs[0:len(strs)-1];")
echo $result
}
result的返回值会取echo
最后print
输出的一个值
字符串分割
使用的是字符串分割与合并
1
2
3
4
5
read -ra strs <<< ${result//";"/" "}
for var in ${urls[@]}
do
echo $var
done
字符串为空等判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 字符串判断为空
if [ -z "$result"]
then
echo "是个空的"
else
echo "不是空的"
fi
# == !=
if [[ result != 'failed' ]]
then
echo ""
fi
# 数字的话直接就是
if [ result > 0 ]
then
echo ""
fi
字符串encode
可以使用python进行字符串encode操作
1
2
3
4
#!/bin/bash
name='测试'
result=${python -c "import urllib;print urllib.quote_plus('${name}');"}
echo $result
参考文章
本文由作者按照 CC BY 4.0 进行授权