whileループ
CoddyのTerminalジャーニー「基礎」セクションの一部 — レッスン 72/82。
for ループは、繰り返し処理するアイテムを正確に知っている場合に最適です。しかし、ある条件が変化するまでループを続けたい場合はどうでしょうか? そこで while ループが登場します。
while ループは、その条件が true の間、実行を続けます。基本的な構造は以下のとおりです:
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "Count: $count"
count=$((count + 1))
doneこのスクリプトは1から5までの数字を出力します。
ループは count が 5 未満または等しいかどうかをチェックします。true の場合、本文を実行し、算術のために $((...)) を使用してカウンターをインクリメントし、再びチェックします。
count が 6 に達すると、条件が false になり、ループが停止します。
while ループは、事前に必要な反復回数がわからない場合に最適です。たとえば、ユーザーが「quit」と入力するまで入力を求め続ける場合:
#!/bin/bash
input=""
while [ "$input" != "quit" ]; do
read -p "Enter command (quit to exit): " input
echo "You entered: $input"
donewhile ループには注意してください。条件が決して false にならない場合、ループは永遠に実行されます。
ループ内では、カウンタをインクリメントしたりユーザー入力に基づいて変数を更新したりするなど、条件を最終的に変更する何かが必ず起こるように常に確かめてください。
チャレンジ
簡単counter.sh という名前のシェルスクリプトを作成し、while ループを使用して 1 から 4 までの数を印刷します。
スクリプトは以下を行うべきです:
- シェバン行 (
#!/bin/bash) で開始します - 初期値
1の変数numを作成します numが 4 未満または等しい間継続する while ループを使用します- ループ内で、フォーマット
Number: [num]で現在の数を印刷します - 各反復後に
$((num + 1))を使用してnumを 1 増分します
スクリプトを実行可能にし、実行します。出力は次のようになるべきです:
Number: 1
Number: 2
Number: 3
Number: 4ヒント: 「未満または等しい」比較には
-leを使用します。無限ループを避けるために、ループ内でカウンタをnum=$((num + 1))で増分することを忘れずに。while ループはdoneで終了します。
チートシート
while ループは、その条件が true のままである限り実行を続けます:
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "Count: $count"
count=$((count + 1))
doneループは各イテレーションの前に条件をチェックします。カウンタをインクリメントするための算術演算には $((...)) を使用します。
while ループは、事前に必要なイテレーション数をわからない場合に便利です。例えば、特定のユーザー入力を待つ場合などです:
#!/bin/bash
input=""
while [ "$input" != "quit" ]; do
read -p "Enter command (quit to exit): " input
echo "You entered: $input"
done無限ループを避けるため、ループ内の何かが最終的に条件を変更するように常に確保してください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。