bashでloopする方法を解説

Bash

本記事ではbashでloop処理をする方法をいくつか紹介します。

loop処理の方法

Bash には主に以下の 3 つのループ構文があります。

  1. forループ
  2. whileループ
  3. untilループ

ここではそれぞれのループの基本的な使い方と具体例を紹介します。

forループ

構文

for 変数 in リスト
do
    コマンド ...
done
  • リスト」には、スペース区切りの値を直接書くこともでき、{1..10} のような連番やコマンド置換なども使えます。

例 1: 単純にリストを回す

#!/bin/bash

colors=(red green blue)  # 配列を定義

for color in "${colors[@]}"  # 配列の全要素をループ
do
    echo "color: $color"
done

実行結果

color: redcolor: greencolor: blue

例 2: 連番を利用する

#!/bin/bash

# {}を使った連番
for i in {1..5}
do
    echo "Number: $i"
done

実行結果

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

例 3: 数値範囲を指定するfor

#!/bin/bash

for ((i=0; i<5; i++))
do
    echo "i: $i"
done
  • (( )) の中で C 言語のように初期化・条件・増分が書けます。

whileループ

こちらでも解説しています。

構文

while [ 条件式 ]
do
    コマンド ...
done
  • 条件式が真 (0) の間ループを続けます。

例 1: カウンタを使ったwhileループ

#!/bin/bash

count=1

while [ $count -le 5 ]
do
    echo "count = $count"
    count=$((count + 1))  # カウンタをインクリメント
done

実行結果

count = 1
count = 2
count = 3
count = 4
count = 5

例 2: ファイルを行ごとに読み込むwhileループ

#!/bin/bash

# "lines.txt" を一行ずつ読み込んで処理
while read line
do
    echo "Line: $line"
done < lines.txt
  • done < ファイル名 の形で、ファイルをストリームとして1行づつ読み込んで while の read に渡して処理できます。
  • シェルスクリプトの内部だけでなくパイプとも組み合わせることが可能です。
cat lines.txt | while read line; do echo "Line: $line"; done

untilループ

構文

until [ 条件式 ]
do
    コマンド ...
done
  • whileとは逆で、条件式が偽 (0 以外) の間ループを実行し、条件式が真 (0) になるとループを抜けます。

例: untilの基本的な使い方

#!/bin/bash

count=1

until [ $count -gt 5 ]
do
    echo "count = $count"
    count=$((count + 1))
done
  • この例では [ $count -gt 5 ] が真になる(=countが 6 以上になる)までループが継続します。

まとめ

  1. for: リストを順番に取得して処理したいとき、あるいは C 言語風に「初期化・条件式・カウントアップ」でループを回したいときに使う。
  2. while: 与えられた条件式が真(0)である限りループする。一般的にファイル読み込みやパイプ処理と組み合わせることが多い。
  3. until: 与えられた条件式が真になるまでループを続ける。whileの否定形のイメージで使用できる。

Bash スクリプトのループの特徴としては、

  • for 変数 in リスト でループ対象を指定
  • while [ 条件式 ]until [ 条件式 ] で条件を満たすかどうか
  • done < ファイル名 のように外部ファイルから入力を受ける

などの書き方があることを押さえておくと便利です。

タイトルとURLをコピーしました