何千ものファイルで満たされたディレクトリがあり、これらのファイルを 1 つずつ処理するように求められたと想像してください。かなり面倒そうですよね? Bash スクリプトで For ループを使用している場合はそうではありません。 bash スクリプトの for ループは、汗をかくことなくファイルを効率的に処理しながら、繰り返しのタスクを自動化できる魔法のツールです。この記事では、bash の for ループとは何かについて、自動化を簡単に行うためのいくつかの実践的な例を示しながら説明します。
BashスクリプトのForループとは何ですか
For ループは、反復的なタスクを実行したり、一連のコマンドを特定の回数実行したりするために使用される制御構造です。 for ループを使用すると、数値、リスト、ファイル、さらにはディレクトリを反復処理できます。
Bash For ループ: POSIX スタイルの構文
POSIX (ポータブル オペレーティング システム インターフェイス) スタイルの構文は、bash などの POSIX 準拠のシェルで使用でき、ファイルのリスト、任意のシーケンス、または他のコマンドの出力を反復処理するために使用できます。 bash スクリプトの for ループ構文は次のとおりです。
for <loop_variable> in <list_to_iterate>
do
<Commands_to_be_executed_in_each_iteration>
done
上記の構文の意味は次のとおりです。
- <loop_variable> は 、<list_to_iterate> の各項目を保持するユーザー定義変数です。
- <list_to_iterate> は、 for ループで反復する必要がある項目のリストを指します。数値、文字列、コマンドの出力などのリストを指定できます。
- do キーワードは、for ループの開始を示します。
- <Commands_to_be_executed_in_each_iteration> に は、反復ごとに実行されるコマンドまたはステートメントが含まれます。
- Done キーワードは、for ループの終了を示します。
ここで、POSIX スタイルの for ループに基づいたいくつかの実用的な例を見てみましょう。
例 1: 指定された範囲をループする
#!/bin/bash
# Print numbers from 1 to 5
for i in $(seq 1 5); do
echo $i
done
上記のスニペットでは、$(seq 1 5) 部分を使用して 1 から 5 までの整数のリストが生成されます。その後、リストを 1 つずつループし、各値が新しい行に出力されます。
例 2: 配列をループする
#!/bin/bash
fruits=("Apple" "Banana" "Orange" "Grapes")
for fruit in "${fruits[@]}"; do
echo "Fruit: $fruit"
done
配列は、異なるタイプの複数のデータを含めるために使用されるデータ構造です。上記のスニペットでは次のようになります。
-
この線
fruits=("Apple" "Banana" "Orange" "Grapes")は、4 つの異なる果物名を含む配列を宣言するために使用されます。 -
この線 ”
for fruit in "${fruits[@]}"; do」はForループを設定します。現在の要素の値を保持する変数「fruit」と、反復される配列として「${fruits[@]}」を指定します。 「${fruits[@]}」内の「@」は、配列のすべての要素を表します。 -
「
echo "Fruit: $fruit"」という行は、各反復中に「Fruit」という単語とともに各フルーツの名前を新しい行に出力します。 - 最後に、最後の行「done」は for ループの終了を示します。
上記のコマンドから得られる出力は次のとおりです。
例 3: コマンド置換を使用したループ
#!/bin/bash
for file in $(ls); do
echo "File: $file"
done
コマンド置換の仕組みは、最初にコマンドが実行され、次に for ループがコマンドの出力全体を反復処理することです。反復されるコマンドは「
$()
」内に配置されます。上記のスニペットでは次のようになります。
-
for file in $(ls); do行for file in $(ls); do、$(ls)次に、部分は ‘ls’ コマンドを実行し、その出力 (現在のディレクトリ内のファイルのリスト) がループの入力として使用されます。ループは、出力内で見つかった各ファイル名を反復処理します。 -
echo "File: $file"という行は、各反復中にプレフィックス “File: ” とともに “file” 変数の値を出力します。 「file」変数には、ループ内で処理されている現在のファイルの名前が含まれます。 - 最後に、最後の行「done」は for ループの終了を示します。
上の例で示したコマンド置換を使用した for ループの出力は次のようになります。
Bash For ループ: C スタイルの構文
C スタイルの構文は、C、C++、Java、JavaScript などの他の言語の for ループ構文に慣れているユーザーに適しています。C スタイルの for ループの基本構文は次のとおりです。
for ((<variable_initialization>; <test_condition>; <step_value>))
do
<commands_to_execute>
done
上記の構文では次のようになります。
-
<variable_initialization>ループ変数が開始される初期値を指します。 -
<test_condition>出力が依存する条件を定義します。この条件は反復ごとにチェックされます。 -
<step_value>ループ変数を更新する必要がある値を指します。 - <commands_to_execute> は、反復ごとに実行する必要があるコマンドまたはステートメントを指します。
ここで、C スタイルの for ループに基づいたいくつかの実践的な例を見てみましょう。
例 1: 1 から 10 までの奇数を出力する
!#/bin/bash
for((i = 1; i <= 10; i = i + 1))
do
if (( i % 2 == 1 ))
then
echo "Odd Number: $i"
fi
done
上記のスニペットでは次のようになります。
-
for((i = 1; i <= 10; i = i + 1))行はループ変数を 1 に初期化し、反復ごとに「i の値が 10 以下であるかどうか」をチェックし、最後にループ変数をインクリメントします。反復ごとに現在の値に 1 を加算して i の値を計算します。 -
if (( i % 2 == 1 )) は、i の現在の値を 2 で割った余りの値が 1 に等しいかどうかをチェックします –
- 割り切れる場合は、行 echo “Odd Number: $i” が実行され、i の値が出力されます。
- 行 fi は、if 条件の終わりを示します。
- 最後に、最後の行は for ループの終わりを示し、最後に実行されます。
上記のコードで得られる出力は次のとおりです。
例 2: 配列をループする
#!/bin/bash
fruits=("Apple" "Banana" "Orange" "Grapes")
for ((i = 0; i < ${#fruits[@]}; i++)); do
echo "Fruit $((i+1)): ${fruits[i]}"
done
上記のコードでは次のようになります。
- Fruits=(“Apple” “Banana” “Orange” “Grapes”) は、すべての果物名の配列を作成します。
- for ((i = 0; i < ${#fruits[@]}; i++)) は、まずループ変数「i」を 0 に初期化し、これが配列のインデックス変数としても機能し、ループは「 i」は、「fruits」配列 (${#fruits[@]} で示される) の要素の数よりも小さいです。ループは反復ごとに「i」を 1 ずつ増加させます。
- 配列インデックスは 0 から始まりますが、1 から始まるように表示したいため、行 echo “Fruit $((i+1)): ${fruits[i]}” は現在のインデックスと等しい値を出力します。 i」に 1 を加えます。
- 最後に、最後の行は for ループの終わりを示します。
上記の for ループの出力は次のとおりです。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





