Bash の for ループ

Fumbani Banda 2023年1月30日
  1. Bash の for ループ
  2. Bash で for ループを使用する例
  3. Bash の for ループに break がある条件付き終了
  4. for ループによるコマンド置換
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 ループに戻り、変数 i2 に設定し、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つの式の表記法を使用しています。最初の式では、x0 に初期化されます。2 番目の式には、xmax 変数の値以下であるかどうかをチェックする条件付きテストがあります。

max 変数の値は 5 に設定されています。最後の式は、x の値を 1 だけインクリメントします。

初めて、x の値は 0 であり、05 以下であるため、条件は true を返します。次に、for ループはターミナルに number: 0 を出力し、x の値は 1 ずつインクリメントされます。x1 になります。

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
著者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

関連記事 - Bash Loop