Linuxコマンド-コマンドをn回繰り返す

1. 前書き

コマンドを繰り返すことは、Linuxスクリプトを操作するときに最も一般的に使用される操作の1つです。
*このクイックチュートリアルでは、さまざまなアプローチを使用して操作を_n_回実行する方法を示します。*

2. _for_ループの使用

例を通して使用するタスクを定義することから始めましょう。 物事を簡単にするために、*「コマンド」という言葉をコンソールに5回出力します*。 可能な限り反復番号も含めます。
まっすぐ飛び込んで、古き良き「for-loop」から始めましょう。
for i in {1..5}
do
  echo "Command no. $i"
done
上記の例の結果は次のとおりです。
Command no. 1
Command no. 2
Command no. 3
Command no. 4
Command no. 5
これらの操作を1行のソリューションにまとめることもできます。
for i in {1..5}; do echo "Command no. $i"; done
条件ベースの式が必要なシナリオでは、よりプログラミングスタイルのアプローチも使用できます。
for ((i=0;i<5;i++)); do echo "Command no. $i"; done

3. _while_ループの使用

繰り返し可能なコマンドを実装するために、「while-loop」を使用することもできます。
i=1
while [[ $i -le 5 ]]; do
  echo "Command no. $i"
  let ++i;
done
前の例のように、このループを1行だけで実装できます。
i=1; while [[ $i -le 5 ]]; do echo "Command no. $i"; let ++i; done

*4. xargs *で_seq_を使用する

かなり効率的であることが証明されている、それほど単純ではないアプローチを使用してみましょう。
Linuxのドキュメントによると、* _ seq_は数字のシーケンス*を出力し、_ * xargs * _ *引数リストを構築し、各引数で指定されたコマンドを実行します*。
それを念頭に置いて、これらの2つの操作をパイプして、繰り返し可能なコマンドを作成できます。
seq 5 | xargs -I{} echo "Command no. {}"
上記の例では、プレースホルダー文字列“\ {}â€で_-I_フラグを使用しました。 次に、定義されたコマンドのプレースホルダーがシーケンス番号に置き換えられ、上記と同じ出力が得られます。

5. バッシュ関数

これまでに説明したすべてのソリューションには、ある程度の定型コードが必要です。
*繰り返し可能なコマンドを頻繁に使用する場合は、例の1つをbash関数に書き換えることができます。*
function repeat(){
  for ((i=0;i<$1;i++)); do
    eval ${*:2}
  done
}
これで、シェルで関数を使用できます。
repeat 5 echo "Command"
上記の例では、_eval_を使用して、変数の割り当てなど、実行可能ファイルではないコマンドを使用できるようにしました。
また、インデックス2から始まるすべてのコマンド入力変数の配列に評価される_ $ \ {*:2} _も導入しました。
*実装は複数の引数を受け入れるため、_repeat_関数に複数のコマンドを渡すこともできます:*
repeat 5 echo "Command" ";" echo "Another command"

6. ZSH

前述の例はすべてのbashシェルに有効ですが、ZSHなどの他のソリューションもあります。
このシェルには、コマンドを_n_回繰り返す単純な組み込み関数があります。
repeat 5 echo "Command"
また、複数のコマンドの場合:
repeat 5 {echo "Command1"; echo "Command2"}

7. 結論

この記事では、Linuxコマンドを複数回繰り返すいくつかの方法を検討しました。
バニラバッシュスクリプトの使用例を見て、カスタムシェルZSHの事前定義された_repeat_関数を示しました。