シェルでwhileのループ処理の書き方

シェルでwhileのループ処理の書き方

シェルスクリプトにおいて、whileループは特定の条件が真である間、繰り返し処理を実行するために使用されます。
基本的な構文と使用例を以下に示します。

基本構文

while [ 条件 ]
do
  # 条件が真である間に実行するコマンド
  コマンド1
  コマンド2
  # ...
done

簡単な例

たとえば、1から5までの数字を出力するループは次のように書けます。

#!/bin/bash

count=1

while [ $count -le 5 ]
do
  echo "カウント: $count"
  count=$((count + 1))
done

このスクリプトの説明は以下の通りです:

1. count という変数を 1 に初期化します。
2. while ループは、count が 5 以下である限りループを繰り返します (-le は「以下」の意味)。
3. ループの各回で echo コマンドを使用して count の値を出力します。
4. count の値を 1 増やして次のループに進みます。
5. count が 6 になると、条件が false となりループが終了します。

条件が常に真の場合

条件が常に真の場合、無限ループを作ることもできます。
以下は Ctrl+C で停止するまで "Hello, World!" を出力し続ける例です。

#!/bin/bash

while true
do
  echo "Hello, World!"
done

入力からの条件判定

ユーザー入力に基づいてループを終了する場合、次のようなスクリプトが考えられます。

#!/bin/bash

while true
do
  echo "何か入力してください (qで終了): "
  read input

  if [ "$input" = "q" ]; then
    echo "終了します"
    break
  fi

  echo "入力された内容: $input"
done

このスクリプトは以下の動作を行います:

1. while true により無限ループが開始されます。
2. ユーザーからの入力を受け取り、その入力内容を input 変数に格納します。
3. if 文で入力が q の場合にループを break して終了します。
4. それ以外の場合は、入力された内容を表示してループを続けます。

ファイルの行を読み込む

ファイルの各行を処理するために while ループを使用することもよくあります。
例えば、input.txt というファイルの内容を一行ずつ読み込んで出力するスクリプトは以下のようになります。

#!/bin/bash

while IFS= read -r line
do
  echo "行の内容: $line"
done < input.txt

このスクリプトでは、以下の動作を行います:

1. while ループでファイル input.txt を一行ずつ読み込みます。
2. IFS= read -r line によって各行が line 変数に格納されます。
3. その内容が echo コマンドで出力されます。

終了条件

while ループの終了条件は、[ 条件 ] 内で指定します。
これには以下のような比較演算子が使えます。

  • -eq : 等しい (equal)
  • -ne : 等しくない (not equal)
  • -lt : より小さい (less than)
  • -le : 以下 (less than or equal)
  • -gt : より大きい (greater than)
  • -ge : 以上 (greater than or equal)

また、文字列の比較には = や != を使用します。

while [ "$str1" = "$str2" ]

シェルスクリプトでのwhileループは非常に強力で、さまざまな処理を柔軟に実行できます。
具体的な使用方法は、システム上で処理したい内容によって異なるため、必要に応じてこの構文を応用してみてください。