
ループはプログラミング言語の基本的な概念の1つです。ループは、特定の条件に達するまで一連のコマンドを繰り返し実行する場合に便利です。
Bashなどのスクリプト言語では、ループは反復的なタスクを自動化するのに役立ちます。
Bashスクリプトには、for
という3つの基本的なループ構造があります。 ループ、while
ループし、until
ループ。
このチュートリアルでは、Bashのforループの基本について説明します。 break
の使用方法も紹介します およびcontinue
ループの流れを変更するステートメント。
for
ループ#
for
ループはアイテムのリストを繰り返し処理し、指定されたコマンドのセットを実行します。
Bash for
ループは次の形式を取ります:
for item in [LIST]
do
[COMMANDS]
done
リストは、スペース、数値の範囲、コマンドの出力、配列などで区切られた一連の文字列にすることができます。
文字列をループする#
以下の例では、ループは文字列のリスト内の各項目と変数element
を繰り返し処理します。 現在のアイテムに設定されます:
for element in Hydrogen Helium Lithium Beryllium
do
echo "Element: $element"
done
ループは次の出力を生成します:
Element: Hydrogen
Element: Helium
Element: Lithium
Element: Beryllium
番号範囲をループします#
シーケンス式を使用して、範囲の開始点と終了点を定義することにより、数値または文字の範囲を指定できます。シーケンス式は次の形式を取ります:
{START..END}
これは、0から3までのすべての数値を繰り返すループの例です。
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
Bash 4から、範囲を使用するときに増分を指定することもできます。式は次の形式を取ります:
{START..END..INCREMENT}
これは、5ずつインクリメントする方法を示す例です:
for i in {0..20..5}
do
echo "Number: $i"
done
Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
配列要素をループする#
for
を使用することもできます 要素の配列を反復処理するためにループします。
以下の例では、BOOKS
という名前の配列を定義しています。 配列の各要素を繰り返し処理します。
BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')
for book in "${BOOKS[@]}"; do
echo "Book: $book"
done
Book: In Search of Lost Time
Book: Don Quixote
Book: Ulysses
Book: The Great Gatsby
CスタイルのBashforループ#
Cスタイルのfor
の構文 ループは次の形式を取ります:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
INITIALIZATION
一部は、ループの開始時に1回だけ実行されます。次に、TEST
一部が評価されます。 falseの場合、ループは終了します。 TEST
の場合 trueの場合、for
の本文内のコマンド ループが実行され、STEP
一部が更新されます。
次のサンプルコードでは、i = 0
を初期化することでループが開始されます。 、および各反復の前に、i ≤ 10
かどうかをチェックします 。 trueの場合、i
の現在の値を出力します および[変数をインクリメント]i
1で(i++
)それ以外の場合、ループは終了します。
for ((i = 0 ; i <= 1000 ; i++)); do
echo "Counter: $i"
done
ループは1001回繰り返され、次の出力を生成します。
Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
break
およびcontinue
ステートメント#
break
およびcontinue
ステートメントを使用して、forループの実行を制御できます。
break
ステートメント#
break
ステートメントは現在のループを終了し、終了したステートメントに続くステートメントにプログラム制御を渡します。通常、特定の条件が満たされたときにループを終了するために使用されます。
次の例では、if
を使用しています 現在の反復アイテムが「リチウム」と等しくなると、ループの実行を終了するステートメント。
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'
Element: Hydrogen
Element: Helium
All Done!
continue
ステートメント#
continue
ステートメントはループの現在の反復を終了し、プログラム制御をループの次の反復に渡します。
次の例では、数値の範囲を反復処理しています。現在の反復アイテムが「2」に等しい場合、continue
ステートメントにより、実行はループの最初に戻り、次の反復を続行します:
for i in {1..5}; do
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
Number: 1
Number: 3
Number: 4
Number: 5
for
ループの例# ファイル名にスペースを含むファイルの名前を変更する#
次の例は、スペースをアンダースコアに置き換えて、現在のディレクトリ内のすべてのファイルの名前をスペースに変更する方法を示しています。
for file in *\ *; do
mv "$file" "${file// /_}"
done
コードを1行ずつ分類してみましょう:
- 最初の行は
for
を作成します 名前にスペースが含まれるすべてのファイルのリストをループして繰り返します。式*\ *
リストを作成します。 - 2行目はリストの各項目に適用され、ファイルを新しい項目に移動して、スペースをアンダースコア(
_
)に置き換えます。 )。パーツ${file// /_}
シェルパラメータ展開を使用して、パラメータ内のパターンを文字列に置き換えています。 done
ループセグメントの終わりを示します。
次の例は、Bashのfor
の使用方法を示しています。 ファイル拡張子を.jpegから.jpgに置き換えることにより、現在のディレクトリで.jpegで終わるすべてのファイルの名前を変更するループ。
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
コードを1行ずつ分析してみましょう:
- 最初の行は
for
を作成します ループして、「。jpeg」で終わるすべてのファイルのリストを繰り返します。 - 2行目はリストの各アイテムに適用され、ファイルを新しいファイルに移動して、「。jpeg」を「.jpg」に置き換えます。
${file%.jpeg}
シェルパラメータ展開を使用してファイル名から「.jpeg」部分を削除するには done
ループセグメントの終わりを示します。
結論#
Bash for
ループは、特定のコマンドセットを一定の回数繰り返し実行するために使用されます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。