Unix / Linux - シェルループ制御

こんにちは、未来的なプログラマーさんたち!今日は、UnixおよびLinuxシェルスクリプティングにおけるエキサイティングなループ制御の世界に飛び込んでみましょう。あなたの近所の親切なコンピュータ教師として、私はこの旅をステップバイステップで案内します。プログラミングが初めての方也不用担心——基本から始めて、少しずつ進んでいきましょう。コーヒー(またはあなたが好むお茶)を飲みながら、ループを始めてみましょう!

Unix / Linux - Loop Control

ループの理解

ループ制御に飛び込む前に、まずループとは何かを簡単に復習しましょう。黒板に「プログラミングが大好きだ」を100回書くという課題があったとします。これを手動で100回書く代わりに、ループを使ってこの繰り返しのタスクを自動化することができます。これがプログラミングにおけるループの役割です——同じコマンドを何度も書かなくても、複数回実行できるようにするものです。

無限ループ

次に、魅力的でありながらも潜在的に危険なものについて話しましょう:無限ループ。これは止まらないメリーゴーランドのように、終わりのないまま続きます。

無限ループとは?

無限ループは、終了条件が満たされることがないため、終わりなく実行し続けるループです。これは災害の予兆のように聞こえるかもしれませんが、実際にはいくつかのシナリオで無限ループが役に立つことがあります(後でその話題に触れます)。

無限ループの例

以下はシェルスクリプティングにおける無限ループの簡単な例です:

#!/bin/bash
while true
do
echo "This is an infinite loop!"
sleep 1
done

このスクリプトでは:

  • while true は常に真である条件を作成し、ループは止まりません。
  • echo はメッセージを表示します。
  • sleep 1 は次のイテレーションまでスクリプトを1秒停止します。

このスクリプトを実行すると、「This is an infinite loop!」が每秒表示され、手動で停止するまで(通常は Ctrl+C を押して)続きます。

無限ループの使用シーン

信じられないかもしれませんが、無限ループは常に悪いものではありません。以下のようなシーンで役立ちます:

  1. 継続的に実行する必要があるプログラム(サーバーなど)を作成する場合。
  2. ユーザーが繰り返し選択できるメニューシステムを実装する場合。
  3. 特定のイベントや条件を監視する場合。

ただし、力には責任が伴います。必要なときに無限ループを終了する方法を常に確保してください!

break文

無限ループの終わり方を学びましょう。緊急脱出のために break 文が登場します。

breakは何をする?

break 文はその名の通り——現在のループを「終了」します。ループの条件がまだ真である場合でもです。

breakの使用例

前述の無限ループを5回のイテレーション後に停止するように修正してみましょう:

#!/bin/bash
count=0
while true
do
echo "Loop iteration: $count"
count=$((count + 1))
if [ $count -eq 5 ]
then
echo "Breaking the loop!"
break
fi
sleep 1
done
echo "Loop has ended."

このスクリプトでは:

  • count 変数を初期化してイテレーションを追跡します。
  • 各イテレーションで count をインクリメントし、5に等しいかどうかをチェックします。
  • count が5の場合、メッセージを表示し break を使用してループを終了します。

このスクリプトを実行すると、5まで数え上がった後停止します。

continue文

break 文がループ全体を終了する一方で、時には現在のイテレーションの残りをスキップして次に進むだけ suffice することがあります。その場合に便利なのが continue 文です。

continueは何をする?

continue 文は現在のループイテレーションの残りをスキップし、次のイテレーションに進みます。

continueの使用例

以下は1から10までの数字を表示するスクリプトですが、偶数をスキップします:

#!/bin/bash
for i in {1..10}
do
if [ $((i % 2)) -eq 0 ]
then
continue
fi
echo $i
done

このスクリプトでは:

  • for ループを使用して1から10までの数字をイテレーションします。
  • if [ $((i % 2)) -eq 0 ] で数字が偶数かどうかをチェックします。
  • 数字が偶数の場合、continue を使用して次のイテレーションに進みます。

このスクリプトを実行すると、奇数のみが表示されます:1, 3, 5, 7, 9。

すべてを合わせて

無限ループ、breakcontinue について学んだことを合わせて、より複雑な例を作成しましょう:

#!/bin/bash

echo "Welcome to the Number Guessing Game!"
secret_number=$((RANDOM % 10 + 1))
attempts=0

while true
do
read -p "Guess a number between 1 and 10 (or 'q' to quit): " guess

if [ "$guess" = "q" ]
then
echo "Thanks for playing! The secret number was $secret_number."
break
fi

if ! [[ "$guess" =~ ^[0-9]+$ ]]
then
echo "Please enter a valid number or 'q' to quit."
continue
fi

attempts=$((attempts + 1))

if [ "$guess" -eq "$secret_number" ]
then
echo "Congratulations! You guessed the number in $attempts attempts!"
break
elif [ "$guess" -lt "$secret_number" ]
then
echo "Too low! Try again."
else
echo "Too high! Try again."
fi
done

このスクリプトはシンプルな数字当てゲームを作成し、以下のことを示しています:

  • 無限ループでゲームを継続します。
  • 正解した場合や退出を選択した場合に break を使用してループを終了します。
  • 無効な入力をスキップするために continue を使用します。

ループ制御ステートメントのまとめ

以下に学んだループ制御ステートメントの簡単な参照表を示します:

ステートメント 説明 使用シーン
while true 無限ループを作成 ループを継続的に実行する必要がある場合
break 現在のループを終了 特定の条件でループを停止したい場合
continue 現在のイテレーションをスキップ 特定の条件で現在のイテレーションをスキップしたい場合

ループはプログラミングにおける強力なツールですが、責任を持って使用しましょう。ループを終了する方法を常に確保し、breakcontinue を計画的に使用して効率的で効果的なスクリプトを作成しましょう。

未来のシェルスクリプティングの達人、こんにちは!あなたのループは無限に続くべきときに限りますし、break ステートメントはあなたが必要なときに常にあります。次回まで、ループと学習を続けましょう!

Credits: Image by storyset