我需要生成数字值并在curl上使用该值。我已经这样做但代码有一些错误,因为无法生成数字。
#!/bin/bash
for a in $(seq 0 9)
do
pass[0]="$a"
for b in $(seq 0 9)
do
pass[1]="$b"
for c in $(seq 0 9)
do
pass[2]="$c"
for d in $(seq 0 9)
do
pass[3]="$d"
for e in $(seq 0 9)
do
pass[4]="$e"
for f in $(seq 0 9)
do
pass[5]="$f"
curl -d "$a$b$c$d$e$f" somesite.php
done
done
done
done
done
done
我得到了这个输出:
echo ${pass[*}
> done
>
Display all 289 possibilities? (y or n)
> e
> done
> done
> done
> done
> ^C
答案 0 :(得分:3)
更简单(但仍然可怕):
for a in $(seq 0 9)
do
for b in $(seq 0 9)
do
for c in $(seq 0 9)
do
for d in $(seq 0 9)
do
for e in $(seq 0 9)
do
for f in $(seq 0 9)
do
curl -d "$a$b$c$d$e$f" somesite.php
done
done
done
done
done
done
我不相信您复制到问题的脚本就是您执行的脚本。当我运行你的脚本时,它会执行如下命令:
curl -d 0 2 0 8 7 9 somesite.php
注意空格;我怀疑它们是(a)不需要的和(b)在没有IFS的情况下很大程度上是不可避免的,这比修正代码更糟糕。阵列很棒;他们不是为了一切。
顺便说一句,使用以下内容会更简单(
)for number in $(seq -f '%06.0f' 0 1000000)
do
curl -d "$number" somesite.php
done
或:
seq -f '%06.0f' 0 1000000 |
while read number
do
curl -d "$number" somesite.php
done
或......还有其他方法可以做到(见其他答案)。 seq | while read
循环的优点是不需要超过7 MiB的内存来存储数字。
curl
一百万页需要一段时间。
答案 1 :(得分:1)
为什么不这样做?
#!/bin/bash
for ((i=0;i<1000000;++i)); do
printf -v a "%.6d" "$i"
curl -d "$a" somesite.php
done
编辑。由于你想拥有一个“更快”的方法,这是我能想到的最快的方法(其中最简单的是它们中最短的):
#!/bin/bash
for i in {000000..999999}; do
curl -d "$i" somesite.php
done
答案 2 :(得分:1)
我认为这要好得多:
for (( i=0; i<1000000; i++ )); do
VAL=$(printf "%06d" $i)
curl -d "$VAL" somesite.php
done
答案 3 :(得分:1)
试试这个
for i in `seq -f '%06.f' 0 999999`; do
curl -d "$i" somesite.php
done