forループを制御する方法は何ですか?

forループを制御する方法は何ですか?

次のような「forループ」があるとします。

#!/bin/bash
for i in $(cat test_file); do 
echo $i
done

テキストファイルの内容は親フォルダのフォルダ名です。

text_fileに10000個の項目(変数iなど)が含まれている場合、「forループ」が10個の「エコー」ごとに10秒間休止するように指示するにはどうすればよいですか?つまり、forループがtext_fileから変数iを読み取るときに、各特定の期間にforループが実行できる変数の数を制御する方法は何ですか?したがって、出力は次のようになります。

   Variable #1
   Variable #2
   Variable #3
   .
   .
   .
   .
   sleep 10
    Variable #11
    Variable #12
    Variable #13
   .
   .       .

答え1

以下を使用してください強く打つスクリプト(10回の「エコー」の間に10秒間睡眠をとります。):

test.shスクリプトのテスト名

#!/bin/bash
while ((++i)); read -r line
do
    echo "$line"
    if (( "$i" % 10 == 0)) 
    then
        sleep 10
    fi
done < $1

使用法:

bash test.sh test_file

while ((++i))- 入力から行が返されるたびにiカウンタread -r lineをインクリメントします。

if (( "$i" % 10 == 0))- 現在の行番号がi分割されていることを確認します10(実行フローが次の10行に達することを意味します)。

sleep 10- 10秒間スクリプトを一時停止

答え2

xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file

布材

  • xargswithは-L一度に10行を読み取り、sh -cコマンドに渡します。最初のパラメータはプログラム名として使用され、ダミー名を入力しますsh。これにより、この10行をsh「$ @」として使用でき、必要なものは何でもできます。ここではちょうど印刷してみましょう。その後、sleep10秒間待ちます。その後、xargs次の10個の部分が渡され、test_fileのすべての嘘が使い果たされるまでループが繰り返されます。

関連情報