「シェルスクリプトの基礎 - 繰り返し文」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

Wiki がページ「繰り返し文(シェルスクリプト)」を「シェルスクリプトの基礎 - 繰り返し文」に、リダイレクトを残さずに移動しました
201行目: 201行目:
条件にNULLコマンドである:(コロン)を指定すると、無限ループになる。<br>
条件にNULLコマンドである:(コロン)を指定すると、無限ループになる。<br>
NULLコマンド:は、何もせずに終了コード0(真)を返すので、条件が常に真となるため、無限ループになる。<br>
NULLコマンド:は、何もせずに終了コード0(真)を返すので、条件が常に真となるため、無限ループになる。<br>
<br>
無限ループを終了させるには、Ctrlキー + Cキーで強制的に終了させるか、<br>
無限ループを終了させるには、Ctrlキー + Cキーで強制的に終了させるか、<br>
処理部分でif文またはcase文などの条件分岐で、break、return、exitコマンドを実行する。<br>
処理部分でif文またはcase文などの条件分岐で、<code>break</code>、<code>return</code>、<code>exit</code>コマンドを実行する。<br>
  <source lang="sh">
  <source lang="sh">
  while :
  while :
210行目: 211行目:
  </source>
  </source>
<br>
<br>
以下のシェルスクリプトに、無限ループにcase文(条件分岐)を組み込む。<br>
以下の例では、無限ループにcase文(条件分岐)を組み込んでいる。<br>
<br>
<br>
"Repeat? (y/n) :"の表示後、yキーを入力すると"Repeat!"と表示して処理が繰り返され、<br>
<code>Repeat? (y/n) :</code>を表示した後、[y]キーを入力すると"Repeat!"と表示して処理が繰り返され、<br>
nキーを入力すると、"Repeat end."と表示して処理を終了させる。<br>
[n]キーを入力すると、<code>Repeat end.</code>と表示して処理を終了させる。<br>
<br>
<br>
yキーまたはnキー以外のキーを入力すると、"Push y or n key."と表示して、<br>
[y]キーまたは[n]キー以外のキーを入力すると、<code>Push y or n key.</code>と表示する。<br>
yキーまたはnキーのいずれかを入力するように促すメッセージを表示して処理を繰り返す。<br>
その後、[y]キーまたは[n]キーのいずれかを入力するように促すメッセージを表示して、処理を繰り返す。<br>
  <source lang="sh">
  <source lang="sh">
  #!/bin/bash
  #!/bin/bash
239行目: 240行目:
  Repat? (y/n) :n    ← nキーを入力
  Repat? (y/n) :n    ← nキーを入力
  Repeat end.
  Repeat end.
<br><br>
== continueコマンド ==
continueコマンドを実行することにより、以降の処理をスキップして、ループの先頭に移動することができる。<br>
また、breakコマンドと同様に、引数を指定することにより、ネストされたループ処理を一気にスキップすることも可能である。<br>
<source lang="sh">
while 条件式
do
    …
    continue
    …
done
</source>
<br>
以下の例では、continueコマンドに引数を渡して、ネストされたループを一気にスキップしている。<br>
<source lang="sh">
#!/bin/bash
# 最初のexitコマンド回避用フラグ
SKIP="ON"
while :
do
    if [ "$SKIP" != "ON" ]; then
      echo "continue 2 が実行されました."
      exit 0
    fi
    # 以降のループでは上の処理をスキップしない
    SKIP=""
    while :
      do
      if [ "$CNT" = "ON" ]; then
          echo "continue が実行されました."
          continue 2
      fi
      # continue フラグを立てる
      CNT="ON"
      continue
      # continue フラグをオフにする
      CNT=""
    done
done
</source>
<br>
上記の例の実行結果は、以下の通りである。<br>
<br>
最初のメッセージは、変数CNTにフラグを立てた後、continueコマンドを実行するために出力している。<br>
次に、continue 2が実行されて、処理が1つ上のwhile文の先頭に移動する。<br>
変数SKIPは、2段目の繰り返し処理に入る直前でオフにするので、continue 2コマンドを実行した後、メッセージを出力して終了する。<br>
continue が実行されました.
continue 2 が実行されました.
<br><br>
== 多重ループの制御 ==
<code>break</code>コマンドおよび<code>continue</code>コマンドは、数値を指定することにより、ネストされた多重ループを越えた移動ができる。<br>
つまり、指定した数値の分だけ、上の階層のループを対象に実行される。<br>
引数を省略した場合は、1を指定した場合と同じ動作になる。<br>
break <数値>
continue <数値>
<br>
以下の例では、<code>break</code>コマンドに2を指定して実行することにより、2重ループを一気に抜けている。<br>
同様に、2重ループの先頭(1つ目のwhile文の先頭)に戻る場合は、<code>continue</code>コマンドの引数に2を指定して実行する。<br>
<source lang="sh">
while : # 1つ目のループ
do
    ...
    while : # 2つ目のループ
    do
      ...
      # 1つ目のwhile文の先頭に戻る
      continue 2
      ...
      # 1つ目のwhile文から抜ける
      break 2
      ...
    done
done
</source>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:シェルスクリプト]]
[[カテゴリ:シェルスクリプト]]