Bash スクリプトのループ

ShellShellBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Bash スクリプトでループを使う方法を学びます。ループは、一連の命令を何度も繰り返すことができる強力なツールであり、スクリプトを効率的で柔軟にすることができます。ここでは、forwhileuntil の 3 種類のループについて説明します。また、ループの実行を制御する break 文と continue 文についても学びます。この実験は初心者向けに設計されており、各概念を段階的に案内します。

環境のセットアップ

まず、作業環境をセットアップしましょう。すべてのループ実験を保存する新しいディレクトリを作成します。

WebIDE でターミナルを開きます。デフォルトでは /home/labex/project ディレクトリにいるはずです。もし確認ができない場合は、常にこのコマンドを使ってそこに移動できます。

cd /home/labex/project

次に、ループ実験用の新しいディレクトリを作成しましょう。

mkdir bash_loops
cd bash_loops

これにより、bash_loops という新しいディレクトリが作成され、その中に移動します。このディレクトリをすべてのループ実験に使用します。

なぜこのようにするのでしょうか? スクリプトをディレクトリに整理することは良い習慣です。作業を整理し、ファイルを見つけて管理するのが簡単になります。

for ループ

for ループは、値のリストを反復処理するために使用されます。「このリストの各項目に対して、何かを行う」と言っているのと同じです。for ループの使い方を示すスクリプトを作成しましょう。

bash_loops ディレクトリに for_loop.sh という新しいファイルを作成します。

touch for_loop.sh

次に、WebIDE で for_loop.sh ファイルを開き、以下の内容を追加します。

#!/bin/bash

## 名前の配列をループ処理する
echo "配列をループ処理中:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
  echo "こんにちは、$name!"
done

echo ## 読みやすさのために空行を出力する

## 数値の範囲をループ処理する
echo "数値の範囲をループ処理中:"
for i in {1..5}; do
  echo "数字: $i"
done

このスクリプトが何をするか解説しましょう。

  1. 最初のループは名前の配列を通ります。配列内の各名前に対して、挨拶を出力します。
  2. 2番目のループは {1..5} の範囲を使って 1 から 5 まで数えます。

"${NAMES[@]}" の構文は奇妙に見えるかもしれません。@ は「配列のすべての要素」を意味し、引用符と波括弧により、各要素がスペースを含んでいても個別の項目として扱われます。

ファイルを保存し、このコマンドで実行可能にします。

chmod +x for_loop.sh

chmod +x コマンドはファイルを実行可能にします。つまり、プログラムとして実行できるようになります。

次に、スクリプトを実行します。

./for_loop.sh

以下のような出力が表示されるはずです。

配列をループ処理中:
こんにちは、Alice!
こんにちは、Bob!
こんにちは、Charlie!
こんにちは、David!

数値の範囲をループ処理中:
数字: 1
数字: 2
数字: 3
数字: 4
数字: 5

これは、for ループが配列と数値の範囲の両方を反復処理できることを示しています。

while ループ

while ループは、指定された条件が真の間、コードのブロックを実行します。「この条件が真の間、これを続ける」と言っているのと同じです。

while_loop.sh という新しいファイルを作成します。

touch while_loop.sh

WebIDE で while_loop.sh ファイルを開き、以下の内容を追加します。

#!/bin/bash

## while ループを使った単純なカウントダウン
count=5
echo "カウントダウン:"
while [ $count -gt 0 ]; do
  echo $count
  count=$((count - 1))
  sleep 1 ## 1秒待つ
done
echo "打ち上げ!"

このスクリプトを解説しましょう。

  1. 最初に count=5 で初期のカウントダウン値を設定します。
  2. 条件 [ $count -gt 0 ] は「count が 0 より大きい間」を意味します。
  3. ループ内では、現在のカウントを表示し、1 減らし、1 秒待ちます。
  4. count が 0 に達するまでこれが続き、その時点でループは終了します。

sleep 1 コマンドは、スクリプトを 1 秒間停止させ、リアルタイムのカウントダウン効果を作り出します。

ファイルを保存して実行可能にします。

chmod +x while_loop.sh

次に、スクリプトを実行します。

./while_loop.sh

5 から 1 までのカウントダウンが表示され、各数字の間に 1 秒間の停止があります。

カウントダウン:
5
4
3
2
1
打ち上げ!

これは、while ループが条件がもはや真でなくなるまでアクションを繰り返す方法を示しています。

until ループ

until ループは while ループに似ていますが、重要な違いがあります。指定された条件が真になるまで実行を続けます。「この条件が真になるまで、これを続ける」と言っているのと同じです。

until_loop.sh という新しいファイルを作成します。

touch until_loop.sh

WebIDE で until_loop.sh ファイルを開き、以下の内容を追加します。

#!/bin/bash

## until ループを使って 5 まで数え上げる
count=1
echo "5 まで数え上げる:"
until [ $count -gt 5 ]; do
  echo $count
  count=$((count + 1))
  sleep 1 ## 1 秒待つ
done

このスクリプトを解説しましょう。

  1. 最初に count=1 を初期値とします。
  2. 条件 [ $count -gt 5 ] は「count が 5 より大きくなるまで」を意味します。
  3. ループ内では、現在の count を表示し、1 増やし、1 秒待ちます。
  4. count が 5 より大きくなるまでこれが続き、その時点でループは終了します。

ファイルを保存して実行可能にします。

chmod +x until_loop.sh

次に、スクリプトを実行します。

./until_loop.sh

1 から 5 までの数字が表示され、各数字の間に 1 秒間の停止があります。

5 まで数え上げる:
1
2
3
4
5

これは、until ループが条件が真になるまでアクションを繰り返す方法を示しています。

breakcontinue 文の使用

break 文と continue 文は、ループの制御に使用されます。break はループを早期に終了し、continue は現在の反復の残りをスキップして次の反復に移ります。

break_continue.sh という新しいファイルを作成します。

touch break_continue.sh

WebIDE で break_continue.sh ファイルを開き、以下の内容を追加します。

#!/bin/bash

## break を使ってループを早期に終了する
echo "break のデモ:"
for i in {1..10}; do
  if [ $i -eq 6 ]; then
    echo "$i でループを中断"
    break
  fi
  echo $i
done

echo ## 読みやすさのために空行を出力する

## continue を使って反復をスキップする
echo "continue のデモ (奇数を表示):"
for i in {1..10}; do
  if [ $((i % 2)) -eq 0 ]; then
    continue
  fi
  echo $i
done

このスクリプトを解説しましょう。

  1. 最初のループでは、i が 6 に等しいときに break を使ってループを終了します。
  2. 2番目のループでは、continue を使って偶数をスキップします。条件 $((i % 2)) -eq 0 は、数が偶数かどうか(2で割り切れて余りがないかどうか)をチェックします。

% 演算子は、除算後の余りを計算します。したがって、偶数の場合 i % 2 は0になり、奇数の場合1になります。

ファイルを保存して実行可能にします。

chmod +x break_continue.sh

次に、スクリプトを実行します。

./break_continue.sh

以下のような出力が表示されるはずです。

break のデモ:
1
2
3
4
5
6 でループを中断

continue のデモ (奇数を表示):
1
3
5
7
9

これは、break がループを早期に終了できる方法と、continue が条件に基づいて特定の反復をスキップできる方法を示しています。

まとめ

この実験では、Bash スクリプトにおける 3 種類のループについて学びました。

  1. for ループは、項目のリストまたは数値の範囲を反復処理します。
  2. while ループは、条件が真の間続けます。
  3. until ループは、条件が真になるまで続けます。

また、break 文と continue 文についても学びました。これらにより、ループの制御をより細かく行うことができます。

これらのループ構造は、多くのスクリプトにとって基本的なものであり、繰り返し処理を効率的に自動化することができます。自分自身のスクリプトでこれらのループを使って練習することで、その動作と使用例に慣れることができます。