シェルスクリプトにおける制御構造(Flow Control)の利用方法 – 第1部
シェルスクリプトは、Unix系のオペレーティングシステム(OS)で動作するスクリプト言語であり、コマンドを自動化したり、システムタスクを効率的に処理したりするために広く利用されています。シェルスクリプトには、プログラムの制御フローを操作するためのさまざまな構造(制御構造)が用意されており、これによりスクリプト内での処理の流れを制御できます。制御構造は、特定の条件に基づいて異なる処理を実行したり、繰り返し処理を行ったりするために必要不可欠な要素です。
本記事では、シェルスクリプトにおける制御構造の基本的な使い方を解説します。制御構造を効果的に使用することで、より柔軟で効率的なスクリプトを作成できるようになります。
1. 条件分岐(if文)
条件分岐は、スクリプト内で特定の条件が満たされた場合に異なる処理を実行するために使用されます。最も基本的な形は、if
文を使用する方法です。
例:基本的なif文
bash#!/bin/bash
# 変数の定義
number=10
# 条件分岐
if [ $number -gt 5 ]; then
echo "numberは5より大きいです"
fi
上記のスクリプトでは、number
が5より大きい場合にメッセージを表示します。条件式は[ ]
内に記述し、-gt
は「greater than(より大きい)」を意味します。
例:if-else文
if
文に else
を追加することで、条件が満たされない場合の処理を記述できます。
bash#!/bin/bash
number=3
if [ $number -gt 5 ]; then
echo "numberは5より大きいです"
else
echo "numberは5以下です"
fi
この例では、number
が5より大きい場合に最初のメッセージが表示され、そうでない場合に2番目のメッセージが表示されます。
例:if-elif-else文
elif
(else if)を使うことで、複数の条件を順番に評価することができます。
bash#!/bin/bash
number=7
if [ $number -gt 10 ]; then
echo "numberは10より大きいです"
elif [ $number -eq 7 ]; then
echo "numberは7です"
else
echo "numberは10以下ですが7ではありません"
fi
このスクリプトは、number
が10より大きいか、7と等しいか、それともその両方でない場合に異なるメッセージを表示します。
2. 繰り返し処理(for文)
for
文は、指定した回数だけ処理を繰り返すために使用されます。リストの要素や数値の範囲を繰り返し処理する際に便利です。
例:リストを使ったfor文
bash#!/bin/bash
# リストの定義
fruits=("リンゴ" "バナナ" "オレンジ")
# for文による繰り返し
for fruit in "${fruits[@]}"; do
echo "果物は:$fruit"
done
このスクリプトは、リスト内の各果物の名前を順番に表示します。
例:数値範囲を使ったfor文
bash#!/bin/bash
# 1から5までの数字を表示
for i in {1..5}; do
echo "番号:$i"
done
この例では、1から5までの数字を順番に表示します。数値の範囲を指定することで、簡単にループ処理が行えます。
3. 繰り返し処理(while文)
while
文は、指定した条件が真である限り繰り返し処理を行います。この構造は、条件が満たされている間、継続的に処理を実行するのに適しています。
例:条件に基づいたwhile文
bash#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "カウント:$count"
((count++))
done
このスクリプトは、count
が5以下である間、1から5までのカウントを順番に表示します。((count++))
はカウントを1ずつ増加させる式です。
4. 繰り返し処理(until文)
until
文は、指定した条件が真になるまで繰り返し処理を実行します。while
文と逆の動作をするため、条件が満たされるまで処理を続けます。
例:条件が満たされるまで繰り返すuntil文
bash#!/bin/bash
count=1
until [ $count -gt 5 ]; do
echo "カウント:$count"
((count++))
done
この例では、count
が5より大きくなるまで繰り返し処理を行います。
5. break と continue
break
は、ループを途中で終了させるために使用され、continue
はループの現在のイテレーションをスキップして次の繰り返しに進むために使用されます。
例:breakの使用
bash#!/bin/bash
for i in {1..10}; do
if [ $i -eq 5 ]; then
echo "5に到達したのでループを終了します"
break
fi
echo "番号:$i"
done
このスクリプトは、i
が5に到達した時点でループを終了します。
例:continueの使用
bash#!/bin/bash
for i in {1..5}; do
if [ $i -eq 3 ]; then
continue
fi
echo "番号:$i"
done
このスクリプトでは、i
が3の時にそのイテレーションをスキップし、次の繰り返しを実行します。
まとめ
シェルスクリプトにおける制御構造は、スクリプトの流れを制御するために非常に重要です。if
文を使った条件分岐、for
や while
を使った繰り返し処理、そして break
や continue
を使ったループ制御は、シェルスクリプトを効率的かつ柔軟に作成するための基本的な手段となります。
次回のパートでは、より複雑な制御構造や、関数を使ったコードの再利用方法について解説します。