アンドロイド

Bash forループ

Shell Scripting - For Loops

Shell Scripting - For Loops

目次:

Anonim

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

Bashなどのスクリプト言語では、繰り返しタスクの自動化にループが役立ちます。

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

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

ループの標準Bash

forループは、アイテムのリストを反復処理し、指定された一連のコマンドを実行します。

Bash forループの形式は次のとおりです。

for item in do 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}

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スタイルBash forループ

Cスタイルのforループの構文は、次の形式を取ります。

for ((INITIALIZATION; TEST; STEP)) do done

ループの開始時に INITIALIZATION 部分は1回だけ実行されます。 次に、 TEST 部分が評価されます。 falseの場合、forループは終了します。 TEST がtrueの場合、forループの本体内のコマンドが実行され、 STEP 部分が更新されます。

次のコードでは、 i = 0 初期化することによりループが開始され、各反復の前にi≤10かどうかがチェックされます。 trueの場合、 i i 現在の値を1 i++ 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ステートメントを使用して、forループの実行を制御できます。

ブレイクステートメント

breakステートメントは、現在のループを終了し、プログラム制御を、終了したステートメントに続くステートメントに渡します。 通常、特定の条件が満たされたときにループを終了するために使用されます。

次の例では、ifステートメントを使用して、現在の反復項目が「Lithium」に等しくなったらループの実行を終了します。

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium All Done!

声明を続ける

continueステートメントは、ループの現在の反復を終了し、プログラム制御をループの次の反復に渡します。

次の例では、数値の範囲を反復処理しており、現在の反復項目が「2」に等しい場合、continueステートメントによって実行がループの先頭に戻り、次の反復が続行されます。

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Bash Forループの例

ファイル名にスペースを含むファイルの名前を変更する

次の例は、Bash forループを使用して、現在のディレクトリ内のすべてのファイルの名前をスペースで置き換えて、スペースをアンダースコアに置き換える方法を示しています。

for file in *\ *; do mv "$file" "${file// /_}" done

コードを行ごとに分解してみましょう。

  • 最初の行はforループを作成し、名前にスペースを含むすべてのファイルのリストを反復処理します。 式 *\ * はリストを作成します。2行目はリストの各項目に適用され、ファイルを新しいものに移動して、スペースをアンダースコア( _ )に置き換えます。 部分 ${file// /_} は、シェルパラメーター展開を使用して、パラメーター内のパターンを文字列に置き換えています。 done は、ループセグメントの終わりを示します。

ファイル拡張子の変更

次の例は、Bash forループを使用して、ファイル拡張子を.jpegから.jpgに置き換えることにより、現在のディレクトリ内の.jpegで終わるすべてのファイルの名前を変更する方法を示しています。

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

コードを行ごとに分析してみましょう。

  • 最初の行はforループを作成し、「。jpeg」で終わるすべてのファイルのリストを反復処理します。2行目はリストの各項目に適用され、「。jpeg」を「.jpg」に置き換えて新しいファイルに移動します。 ${file%.jpeg} は、シェルパラメータ展開を使用してファイル名から「.jpeg」部分を削除し、ループセグメントの終わりを示します。

結論

ここまでで、bash forループを使用してリストを反復処理する方法を十分に理解できたはずです。

バッシュループターミナル