文章

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'&param2='$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 进行授权