-1

数値を生成する必要があり、その値をカールで使用します。私はこれを行いましたが、数値を生成できないため、コードにいくつかの障害があります。

#!/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ループには、数値を格納するために7MiBを超えるメモリを必要としないという利点があります。

curl100万ページになるまでしばらく時間がかかります。

于 2012-11-26T18:31:39.927 に答える
1

代わりにこれを試してください

for i in `seq -f '%06.f' 0 999999`; do
    curl -d "$i" somesite.php
done
于 2012-11-26T18:37:25.847 に答える
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 に答える