Bash の for ループ
このチュートリアルでは、C プログラミング言語のように範囲表記と 3 式表記を使用して Bash スクリプトで for
ループを使用する方法について説明します。
Bash の for
ループ
for
ループは、コマンドを繰り返し実行するために使用される Bash ステートメントです。Bash の for
ループは 2つの主要な表記法を使用します。2つの表記法を以下に示します。
最初の表記は、定義された範囲で for
ループを使用します。以下の構文では、範囲の終点は n
です。これは、for
ループが停止する前に、その中のコマンドを n
回実行することを意味します。
for variable in 1 2 3 ... n
do
command1
command2
done
2 番目の表記法は、C プログラミング言語のように 3つの式で for
ループを使用します。exp1
は初期化、exp2
は条件、exp3
は増分です。
for ((exp1; exp2; exp3))
do
command1
command2
done
Bash で for
ループを使用する例
以下のスクリプトは、Bash スクリプトで for ループを使用する方法を示しています。
このスクリプトは、変数 i
の値を最初に 1
に設定し、line number 1
を出力します。次に、for
ループに戻り、変数 i
を 2
に設定し、line number 2
を出力します。
スクリプトはこれを繰り返し実行し、最後の数字 5 に達するまで i
の値を変更します。line number 5
を出力すると、for
ループは自動的に終了します。
#!/bin/bash
for i in 1 2 3 4 5
do
printf "line number $i"
printf "\n"
done
上記のスクリプトを実行すると、次の出力が標準出力に出力されます。
line number 1
line number 2
line number 3
line number 4
line number 5
以下のスクリプトでは、中括弧を使用して、for
ループが反復する範囲を定義しています。中括弧内の数字は順番に増加します。
初めて、i
の値は 1
に設定されます。次に、スクリプトは for
ループ内で 2つの printf
コマンドを実行します。i
の値は 1 ずつインクリメントされ、2
になり、for ループ内の printf
コマンドが実行されます。
i
の値は、最終的に 5
になるまで繰り返しインクリメントされ、2つの printf
コマンドが実行されると、for
ループは自動的に終了します。
!/bin/bash
for i in {1..5}
do
printf "Hello World $i"
printf "\n"
done
以下は、スクリプトの実行後に出力される出力です。
Hello World 1
Hello World 2
Hello World 3
Hello World 4
Hello World 5
以下では、スクリプトは C プログラミング言語のように 3つの式の表記法を使用しています。最初の式では、x
は 0
に初期化されます。2 番目の式には、x
が max
変数の値以下であるかどうかをチェックする条件付きテストがあります。
max
変数の値は 5
に設定されています。最後の式は、x
の値を 1
だけインクリメントします。
初めて、x
の値は 0
であり、0
は 5
以下であるため、条件は true を返します。次に、for
ループはターミナルに number: 0
を出力し、x
の値は 1
ずつインクリメントされます。x
は 1
になります。
1
は、5
以下であるかどうかもテストされ、true を返し、for ループは number: 1
を出力します。このプロセスは、条件が false を返し、for
ループが終了するまで繰り返されます。
#!/bin/bash
max=5
printf "Print Numbers from 0 to $max\n"
for ((x=0;x<=max;x++)); do
printf "number: $x\n"
done
以下は、スクリプトの実行後に端末に出力される出力です。
Print Numbers from 0 to 5
number: 0
number: 1
number: 2
number: 3
number: 4
number: 5
Bash の for
ループに break
がある条件付き終了
以下のスクリプトは、break
キーワードを使用して for
ループを終了する方法を示しています。for
ループは、x
変数の値が max
変数の値以下の場合に反復するように設定されています。ただし、for
ループ内には test
コマンドがあります。
test
コマンドは、x
変数の値が 3
に等しいかどうかをチェックします。このテストが true を返す場合、スクリプトは break
キーワードを検出し、for
ループが終了します。
#!/bin/bash
max=5
printf "Print Numbers from 0 to $max\n"
printf "Program will exit when we hit 3\n"
for ((x=0;x<=max;x++)); do
printf "number: $x\n"
if [ $x -eq 3 ]
then
break
fi
done
以下は、スクリプト実行時に標準端末に表示される出力です。for
ループは、x
の値が 3
に等しい場合に存在します。これは、for
ループ内の test
コマンドが、x
変数の値が 3
に設定されている場合に算術式を評価するためです。、および true を返します。次に、スクリプトは if
ステートメント内の break
キーワードに遭遇し、終了します。
Print Numbers from 0 to 5
Program will exit when we hit 3
number: 0
number: 1
number: 2
number: 3
for
ループによるコマンド置換
以下のスクリプトは、コマンド置換で for
ループを使用する方法を示しています。コマンド置換は、Linux コマンドを実行し、コマンドの出力を Bash 変数に格納できるようにする Bash 機能です。この機能を使用してコマンドが実行されると、コマンドの標準出力がコマンドに置き換わります。
スクリプトでは、cat
コマンドはコマンド置換を使用して実行されます。cat file1.txt
の出力がコマンドを置き換え、for
ループがコマンドの出力を繰り返し、printf
コマンドを使用して標準出力に出力します。
#!/bin/bash
printf "Program prints the lines of a file\n\n"
for line in $(cat file1.txt)
do
printf "$line"
printf "\n"
done
スクリプトを実行すると、次の出力が生成されます。ファイル file1.txt
には、標準端末に出力される 3つの言語のリストが含まれています。
Program prints the lines of a file
French
English
Spanish