shell 使用rest API循环的bash脚本有问题

rqcrx0a6  于 2023-01-21  发布在  Shell
关注(0)|答案(2)|浏览(173)

我尝试编写一个bash循环来使用cURL检索一系列数字,但我不太理解如何实现。下面的代码是我尝试检索pi的前100万位的示例,其中API一次只能接受1000位。

for Numbers in {0..100000000000000..1000}
    do
    curl "https://api.pi.delivery/v1/pi?start=$Numbers&numberOfDigits=100&radix=10"
    echo $Numbers
    done

另外,我想把返回值写入一个名为pi.txt的文件中,而不是在终端中显示它们。我应该在终端中还是在脚本中使用〉〉pi.txt命令?有人能帮我更正这个bash脚本吗?
并且我遇到的另一个问题是当我在范围值中更高时例如第一个十亿而不是一百万,我得到"无效请求:我开始问“这怎么解决
上述代码适用于1000000,但在增加该值时不适用

omqzjyyz

omqzjyyz1#

如果使用{0..100000000000000..1000},则得到:

bash: brace expansion: failed to allocate memory for 1215752193 elements

您可以使用

seq 0 1000 100000000000000 | while read Numbers
do
    …
done

但你需要很大的耐心。

fquxozlt

fquxozlt2#

试试看:

#!/bin/bash

file_path="path/to/pi.txt"

for i in {0..1000000..1000}
do
    curl 'https://api.pi.delivery/v1/pi?start='"$i"'&numberOfDigits=1000'
    echo "$i"
done > "$file_path"

当你在字符串两边使用单引号时,它会保留它的文本值,与双引号的区别是字符$的例外。
这个post更深入地描述了这件事,参考了Bash手册。

相关问题