はじめに
この実験では、Bash スクリプトでループを使う方法を学びます。ループは、一連の命令を何度も繰り返すことができる強力なツールであり、スクリプトを効率的で柔軟にすることができます。ここでは、for
、while
、until
の 3 種類のループについて説明します。また、ループの実行を制御する break
文と continue
文についても学びます。この実験は初心者向けに設計されており、各概念を段階的に案内します。
この実験では、Bash スクリプトでループを使う方法を学びます。ループは、一連の命令を何度も繰り返すことができる強力なツールであり、スクリプトを効率的で柔軟にすることができます。ここでは、for
、while
、until
の 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..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 "打ち上げ!"
このスクリプトを解説しましょう。
count=5
で初期のカウントダウン値を設定します。[ $count -gt 0 ]
は「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
このスクリプトを解説しましょう。
count=1
を初期値とします。[ $count -gt 5 ]
は「count が 5 より大きくなるまで」を意味します。ファイルを保存して実行可能にします。
chmod +x until_loop.sh
次に、スクリプトを実行します。
./until_loop.sh
1 から 5 までの数字が表示され、各数字の間に 1 秒間の停止があります。
5 まで数え上げる:
1
2
3
4
5
これは、until
ループが条件が真になるまでアクションを繰り返す方法を示しています。
break
と continue
文の使用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
このスクリプトを解説しましょう。
i
が 6 に等しいときに break
を使ってループを終了します。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 種類のループについて学びました。
for
ループは、項目のリストまたは数値の範囲を反復処理します。while
ループは、条件が真の間続けます。until
ループは、条件が真になるまで続けます。また、break
文と continue
文についても学びました。これらにより、ループの制御をより細かく行うことができます。
これらのループ構造は、多くのスクリプトにとって基本的なものであり、繰り返し処理を効率的に自動化することができます。自分自身のスクリプトでこれらのループを使って練習することで、その動作と使用例に慣れることができます。