我尝试通过内部API获取JSON输出,并在cURL请求之间的参数值中添加100。我需要循环,因为它将每个请求的最大结果数量限制为100.我被告知增加,你应该能够得到你需要的东西"。
无论如何,这是我写的:
#!/bin/bash
COUNTER=100
until [ COUNTER -gt 30000 ]; do
curl -vs "http://example.com/locations/city?limit=100&offset=$COUNTER" >> cities.json
let COUNTER=COUNTER+100
done
问题是我在终端中收到了一堆奇怪的消息,而我试图重定向输出的文件仍包含它的原始100个对象。我觉得我可能错过了一些非常明显的东西。有什么想法吗?我确实在until循环中使用了一个有点旧的教程,所以可能它是一个语法问题?
提前谢谢!
编辑:我并不反对完全替代方法,但我希望这会有点直截了当。我认为我缺乏经验是主要限制因素。答案 0 :(得分:1)
如果您只想覆盖文件的内容一次,那么整个循环......
#!/bin/bash
# ^-- NOT /bin/sh, as this uses bash-only syntax
for (( counter=100; counter<=30000; counter+=100 )); do
curl -vs "http://example.com/locations/city?limit=100&offset=$counter"
done >cities.json
这实际上比在每个>>cities.json
命令上放置curl
更有效,因为它只打开输出文件一次,并且具有清除文件的副作用(您似乎想要)# 39;循环开始时的前内容。
答案 1 :(得分:1)
您可能会发现使用GNU Parallel可以更快地完成此操作:
parallel -k curl -vs "http://example.com/locations/city?limit=100\&offset={}" ::: $(seq 100 100 30000) > cities.json