GNU/Linux >> Linux の 問題 >  >> Linux

Bash For Loop

ループはプログラミング言語の基本的な概念の1つです。ループは、特定の条件に達するまで一連のコマンドを繰り返し実行する場合に便利です。

Bashなどのスクリプト言語では、ループは反復的なタスクを自動化するのに役立ちます。

Bashスクリプトには、forという3つの基本的なループ構造があります。 ループ、while ループし、until ループ。

このチュートリアルでは、Bashのforループの基本について説明します。 breakの使用方法も紹介します およびcontinue ループの流れを変更するステートメント。

標準のBashfor ループ#

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 ループは、特定のコマンドセットを一定の回数繰り返し実行するために使用されます。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. BashForループガイドと例

  2. 反復回数を変更できるForループを作成するにはどうすればよいですか?

  3. Bashでビルド番号を増やしますか?

  1. Bash の For ループと While ループの例

  2. ループの維持 – Bash For、While、Until ループの例

  3. Bash for ループの例

  1. Bashでループを作成する方法

  2. Linuxスクリプト:Bashでのwhileループの3つのハウツー

  3. Linux バッシュ。 for ループと関数、数値の加算