HOWTO · Bash
Bash で for ループを実装する
Bash スクリプトを使用して for ループの反復構造を作成するための簡単なガイド。
このページの内容
このチュートリアルでは、Bash の for ループを作成するために利用できる Bash スクリプトの定式化について説明します。
まず、その基本的な構文と概念を学習します。後で、C スタイルの for ループ表記や foreach または for-in スタイルなど、Bash スクリプトでさまざまなタイプを学習します。
最後に、セミコロンの問題について説明します ; bash プロンプトで for ループを作成している間。
Bash for ループ
プログラミング言語またはスクリプト言語のループは、特定の基準が満たされないまで、ステートメントまたはステートメントのセットを繰り返し実行するために使用される反復制御構造です。
for ループは、特定のステートメントまたはコマンドのセットを指定された回数実行する必要がある場合に特に使用されるループ構造です。bash プロンプトと Bash スクリプトで for ループを使用することもできます。
Bash スクリプトは、for ループを作成するための 2つの構文を提供します。最初のものは C スタイルまたは 3 式ループとして知られており、for ループの C 言語の定式化とほぼ同じです。
2 番目の定式化は、有名な foreach または for-in スタイルの構成であり、PHP、Python、C#、C++ 11、Ruby などの多くの一般的なプログラミング言語でも採用されています。
BashC スタイル for ループ構文
このスタイルでは、C 言語のような 3つの式を使用して、ループの反復回数を指定します。
for (( initialization; condition; increment/decrement ))
do
Shell command[s]
done
例:ユーザーが指定した数値のテーブルを出力するのに役立つスクリプトを作成するとします。次のコードを使用してそれを行うことができます。
#!/bin/bash
echo "Enter a Number: "
read number
for ((j=1;j<=10;j++))
do
echo "$number X $j = $((number*j))"
done
上記のコードは、ユーザーから数値を取得し、そのテーブルを最大 10 まで出力します。ユーザーが数値として 5 を入力したとすると、プログラムの出力は次のようになります。
Enter a Number:
5
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50
Bash Foreach/For-in スタイル構文
このタイプの for ループは、値/要素のリストを予期し、リスト内の要素ごとに 1 回の反復を実行します。リストは、各項目を 1つのスペースで区切ることで提供できます。または、範囲を指定することもできます。
for Counter in 1 2 3 4 5 .. N
do
1st statement
2nd statement
nth statement
done
例:Hello World を 5 回出力します。
#!/bin/bash
for c in 1 2 4 5 6
do
echo "$c Hello World"
done
出力:
1 Hello World
2 Hello World
4 Hello World
5 Hello World
6 Hello World
欠落している 3 に注意してください。ループはリストに指定されたアイテムの数だけ繰り返されるため、この数は失われます。したがって、変数 c には最初に値 1 が割り当てられ、1 回の反復が実行されます。
その後、2 が c に割り当てられ、2 回目の反復が実行されます。後で、リストのすぐ次の値(つまり、4)が c に割り当てられ、リスト全体が終了するまでプロセスが続行されます。
for Item in File_0 File_1 File_N
do
Some Operations on Item
done
また
for Item in $(Command)
do
Some Operations on Item
done
for ループでコマンドを使用すると、Item 変数に各出力トークンが 1つずつ割り当てられます。たとえば、次のスクリプトは、for ループを使用して、現在のディレクトリの f で始まるすべてのファイルまたはフォルダを出力します。
#!/bin/bash
for Item in $(ls f*)
do
echo "$Item"
done
Bash for ループでの範囲とジャンプサイズの定義
一部の開始値と終了値の間に欠落している数値がないことがわかっている場合。ジャンプサイズとも呼ばれる 2つの連続する値の差が 1 より大きい場合でも、次の構文で for ループを使用できます。
for i in {Start_Value..End_Value..Jump_Size}
do
Statement(s)
done
例:10 から 20 までのすべての偶数を出力するには、Start_Value=10、End_Value=20、および Jump_Size=2 が必要です。
#!/bin/bash
for evenNumber in {10..20..2}
do
echo "$evenNumber"
done
出力:
10
12
14
16
18
20
Bash プロンプトで for ループを作成し、セミコロンを区切ることで問題に対処する ;
; 1 行でコマンドを区切るか終了するために使用されます。&などの他の区切り文字もあります。
ただし、; コマンドを終了するために使用されます。次のコマンドは、前のコマンドが完全に実行された後にのみ実行されます。これは同期実行とも呼ばれます。
ステートメントターミネータとして newline を使用せずに、bash プロンプトの 1 行に for ループを記述したい場合は、Bash リファレンスマニュアルから抜粋した次の構文を使用できます。
for Item [ [in [List of Items] ] ; ] do commands; done
例:次のコードは、偶数を出力するための以前のスクリプトと同等です。
#!/bin/bash
for even in {10..20..2} ; do echo "$even";done
do キーワードの直後にあることに注意してください。したがって、; を追加します do の後に構文エラーが生成されます。3 式または C タイプの for ループの構文は次のとおりです。
for (( Initilization ; Condition ; Increment/Decrement )) ; do commands ; done
例:
#!/bin/bash
for ((i=10;i<20;i=i+2));do echo "$i"; done