-1

我需要生成数字值并在 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
4

4 回答 4

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一百万页需要一段时间。

于 2012-11-26T18:31:39.927 回答
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
于 2012-11-26T18:34:37.433 回答
1

我认为这要好得多:

for (( i=0; i<1000000; i++ )); do 
    VAL=$(printf "%06d" $i)
    curl -d "$VAL" somesite.php
done
于 2012-11-26T18:36:24.583 回答
1

试试这个

for i in `seq -f '%06.f' 0 999999`; do
    curl -d "$i" somesite.php
done
于 2012-11-26T18:37:25.847 回答