mornone 发表于 2015-10-15 11:14

shell得到一个字串,分割该字串循环处理



需求:有一个地址A,demo_com/ExportData/?action=json,返回结果是
["demo_com\/ExportData\/Data\/20151013","demo_com\/ExportData\/Data\/20151014","demo_com\/ExportData\/Data\/20151012"]
,需要通过shell循环请求这个json串里的每个单独地址B,demo_com/ExportData/Data/20151013,这个同样返回一个json串,
["demo_com\/ExportData\/Data\/20151013\/Data_6.txt","demo_com\/ExportData\/Data\/20151013\/Data_2.txt","demo_com\/ExportData\/Data\/20151013\/Data_4.txt","demo_com\/ExportData\/Data\/20151013\/Data_7.txt","demo_com\/ExportData\/Data\/20151013\/Data_8.txt","demo_com\/ExportData\/Data\/20151013\/Data_1.txt","demo_com\/ExportData\/Data\/20151013\/id","demo_com\/ExportData\/Data\/20151013\/Data_3.txt","demo_com\/ExportData\/Data\/20151013\/Data_5.txt","demo_com\/ExportData\/Data\/20151013\/Data_10.txt","demo_com\/ExportData\/Data\/20151013\/Data_9.txt"]
,现在的需求是使用shell如何实现自动下载B结果里所有的txt文件呢,从A返回的结果里得B地址,因此B的返回结果都不一样。
我是做php开发的,这在php里直接拿来循环数组就可以搞定,但是在shell下不知道使用什么来分割字串然后循环,在此感谢!

jy02150795 发表于 2015-10-16 22:51

用|cut -d '","' -f 取到数组里?

yjh777 发表于 2015-10-19 16:21

list="demo_com\/ExportData\/Data\/20151013","demo_com\/ExportData\/Data\/20151014","demo_com\/ExportData\/Data\/20151012"
for uri in ${list//,/ }; do echo $uri; done

yjh777 发表于 2015-10-19 16:30

本帖最后由 yjh777 于 2015-10-19 16:31 编辑

完整代码: 无法验证: 不知道使用wget回来的字符串是否就是 json 列表,没有其他字符
list=$(wget demo_com/ExportData/?action=json)
list=${list//[][]/}#删除前后的 []
for uri in ${list//,/ }; do
    sublist=$(wget "$uri")
    sublist=${sublist//[][]/}#删除前后的 []
    for addr in ${sublist//,/ }; do
      wget "$addr"
    done
done
页: [1]
查看完整版本: shell得到一个字串,分割该字串循环处理