第12回 while文で条件付きループをしてみよう:繰り返しと終了条件の基本 | はじめてのシェルスクリプト

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第12回 while文で条件付きループをしてみよう:繰り返しと終了条件の基本 | はじめてのシェルスクリプト
目次

はじめに

この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。

前回(第11回)では、for 文を使って「あらかじめ決まった値のリスト」を順番に処理する方法を学びました。複数のファイル名や文字列を繰り返し処理するのに非常に便利でしたね。

一方で、「特定の条件が成り立つ間は処理を続ける」という形の繰り返しには、for 文よりも while 文の方が適しています。たとえば「カウンタが10になるまで繰り返す」や「入力があるうちは処理を続ける」といった場合です。

第12回では、条件が成り立つ間だけ処理を繰り返す while 文の基本を学びます。ループの終了条件をどう設計するかを意識しながら進めることで、より柔軟なスクリプトが書けるようになります。

この回で学ぶこと

  • while 文とは何か
  • 条件が成り立つ間だけ繰り返す考え方
  • カウンタ変数を使う方法
  • 無限ループにならないための注意
  • read と組み合わせる考え方
  • 繰り返しの終了条件
  • 初学者がつまずきやすい書き方

while 文とは何か

条件付きで繰り返す

while 文は、指定した条件が真である間だけ、同じ処理を繰り返す構文です。

for 文が決まった値を順番に処理するのに対して、while 文は条件が続く間だけ処理を続けます。

基本の形

while 文の基本形は次のようになります。

while [ "$count" -le 3 ]
do
  echo "$count"
  count=$((count + 1))
done

while のあとに条件を書き、条件が真の間は do から done の中を繰り返します。

サンプルコード

while_sample.sh に次の内容を保存します。

#!/bin/sh

count=1

while [ "$count" -le 3 ]
do
  echo "Count: $count"
  count=$((count + 1))
done

実行手順

1. ファイルを作成して保存する

エディタで while_sample.sh という名前のファイルを作成し、次の内容を保存します。

#!/bin/sh

count=1

while [ "$count" -le 3 ]
do
  echo "Count: $count"
  count=$((count + 1))
done

2. スクリプトを実行する

次のコマンドを実行します。

sh while_sample.sh

実行結果は次のようになります。

Count: 1
Count: 2
Count: 3

3. 繰り返し回数を変えて試す

条件の 35 に変更すると、5回まで表示されます。

while [ "$count" -le 5 ]

コードの読み方

count=1

最初にカウンタ変数 count1 で初期化しています。

[ “$count” -le 3 ]

これは、「count3 以下であるか」を調べる条件です。

条件が真の間だけ繰り返します。

echo “Count: $count”

現在の count の値を表示します。

count=$((count + 1))

この行で、count を1ずつ増やしています。

これがあることで、いつか条件が偽になり、繰り返しが終わります。

無限ループに注意する

while 文では、繰り返しの中で条件に関係する値を変えないと、終わらないことがあります。

今回の例で count=$((count + 1)) を書かないと、count はずっと 1 のままです。

その結果、条件がずっと真になり、無限ループになる可能性があります。

read と組み合わせる考え方

while 文は、read と組み合わせて1行ずつ処理する場面でも使われます。

この連載の後半ではその形も扱いますが、まずは「条件が真の間だけ繰り返す」という基本を押さえることが重要です。

初学者がつまずきやすい点

カウンタを増やし忘れる

while 文の中で値を更新しないと、条件が変わらず、繰り返しが終わらないことがあります。

done を書き忘れる

while 文も最後に done が必要です。

条件式の書き方を崩す

[ "$count" -le 3 ] のように、[ ] の前後や比較記号の周りの空白を正しく入れる必要があります。

よくあるエラー

スクリプトが終わらない

無限ループになっている可能性があります。

カウンタ変数を更新しているか確認してください。

parse error near done

while do done の形が崩れている可能性があります。

構文を見直してください。

思った回数だけ繰り返されない

初期値、条件、更新処理の3つを確認してください。

どれか1つがずれると、回数も変わります。

練習用コード

次の内容で count_up.sh を作成して実行してみてください。

#!/bin/sh

number=1

while [ "$number" -le 5 ]
do
  echo "Number: $number"
  number=$((number + 1))
done

条件の数値や初期値を変えて、表示回数がどう変わるか確認してください。

この回で理解しておくこと

  • while 文は条件が真の間だけ繰り返す
  • while do done の形で書く
  • カウンタ変数を使うと回数を制御しやすい
  • 更新処理を書かないと無限ループになることがある
  • 条件、初期値、更新処理の3つが重要である
  • read と組み合わせる形にも発展できる

まとめ

今回は、while 文を使って条件付きで処理を繰り返す基本を確認しました。

while 文を理解すると、条件が続く間だけ繰り返したい処理を書けるようになります。

次回は、関数を使って処理をまとめる方法を学びます。

次回予告

次回は「関数で処理をまとめよう」です。

同じ処理をひとまとまりにして再利用する基本を確認します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次