[Linux] continue文の使い方 – ループ処理の中断

continue文は、ループ処理内で特定の条件が満たされた場合に、その回の処理をスキップし、次のループの反復に進むために使用されます。

forwhileuntilなどのループで利用可能です。

continue文が実行されると、ループの残りの処理はスキップされ、次の反復が開始されます。

例えば、forループ内で特定の条件に一致する場合にその回の処理を飛ばしたい場合に便利です。

この記事でわかること
  • continue文の基本的な使い方
  • 条件分岐での活用方法
  • 応用例としての使用シーン
  • 注意点とパフォーマンスへの影響
  • 使い分けのポイントと代替手法

目次から探す

continue文とは

continue文は、Bashスクリプトにおいてループ処理を制御するための命令です。

ループ内で特定の条件が満たされた場合に、そのループの現在の反復をスキップし、次の反復に移行することができます。

これにより、特定の条件に基づいて処理を柔軟に制御することが可能になります。

例えば、数値のリストを処理する際に、特定の値をスキップしたい場合にcontinue文を使用することで、無駄な処理を避けることができます。

continue文は、forwhileuntilなどのループ構文と組み合わせて使用され、スクリプトの可読性や効率を向上させる役割を果たします。

continue文の基本的な使い方

forループでのcontinue文の使用例

forループ内でcontinue文を使用することで、特定の条件を満たす場合に次の反復にスキップすることができます。

以下は、1から10までの数値の中で偶数をスキップする例です。

for i in {1..10}; do
    if (( i % 2 == 0 )); then
        continue  # 偶数の場合は次の反復へ
    fi
    echo $i
done
1
3
5
7
9

whileループでのcontinue文の使用例

whileループでも同様にcontinue文を使用できます。

以下は、1から10までの数値をカウントし、5をスキップする例です。

i=1
while [ $i -le 10 ]; do
    if [ $i -eq 5 ]; then
        ((i++))
        continue  # 5の場合は次の反復へ
    fi
    echo $i
    ((i++))
done
1
2
3
4
6
7
8
9
10

untilループでのcontinue文の使用例

untilループでもcontinue文を使用することができます。

以下は、1から10までの数値をカウントし、偶数をスキップする例です。

i=1
until [ $i -gt 10 ]; do
    if (( i % 2 == 0 )); then
        ((i++))
        continue  # 偶数の場合は次の反復へ
    fi
    echo $i
    ((i++))
done
1
3
5
7
9

continue文を使った条件分岐

if文とcontinue文の組み合わせ

if文とcontinue文を組み合わせることで、特定の条件に基づいてループの処理をスキップすることができます。

以下は、1から10までの数値の中で3の倍数をスキップする例です。

for i in {1..10}; do
    if (( i % 3 == 0 )); then
        continue  # 3の倍数の場合は次の反復へ
    fi
    echo $i
done
1
2
4
5
7
8
10

case文とcontinue文の組み合わせ

case文を使用して、複数の条件に基づいてcontinue文を使うことも可能です。

以下は、1から10までの数値の中で1、3、5をスキップする例です。

for i in {1..10}; do
    case $i in
        1|3|5)
            continue  # 1、3、5の場合は次の反復へ
            ;;
    esac
    echo $i
done
2
4
6
7
8
9
10

複数条件でのcontinue文の使用

複数の条件を組み合わせてcontinue文を使用することもできます。

以下は、1から20までの数値の中で偶数と5の倍数をスキップする例です。

for i in {1..20}; do
    if (( i % 2 == 0 )) || (( i % 5 == 0 )); then
        continue  # 偶数または5の倍数の場合は次の反復へ
    fi
    echo $i
done
1
3
7
9
11
13
17
19

continue文の応用例

ネストされたループでのcontinue文の使い方

ネストされたループ内でcontinue文を使用することで、内側のループの処理をスキップすることができます。

以下は、2次元配列の中で特定の値をスキップする例です。

array=(1 2 3 4 5)
for i in "${array[@]}"; do
    for j in {1..3}; do
        if [ $i -eq 3 ]; then
            continue  # iが3の場合、内側のループをスキップ
        fi
        echo "i: $i, j: $j"
    done
done
i: 1, j: 1
i: 1, j: 2
i: 1, j: 3
i: 2, j: 1
i: 2, j: 2
i: 2, j: 3
i: 4, j: 1
i: 4, j: 2
i: 4, j: 3
i: 5, j: 1
i: 5, j: 2
i: 5, j: 3

continue文を使った特定の値のスキップ

特定の値をスキップするためにcontinue文を使用することができます。

以下は、1から10までの数値の中で4と7をスキップする例です。

for i in {1..10}; do
    if [[ $i -eq 4 || $i -eq 7 ]]; then
        continue  # 4または7の場合は次の反復へ
    fi
    echo $i
done
1
2
3
5
6
8
9
10

ファイル処理でのcontinue文の活用

ファイルの行を処理する際に、特定の条件を満たす行をスキップするためにcontinue文を使用することができます。

以下は、ファイル内の空行をスキップする例です。

while IFS= read -r line; do
    if [[ -z $line ]]; then
        continue  # 空行の場合は次の反復へ
    fi
    echo "$line"
done < "sample.txt"
(sample.txtの空でない行が出力される)

continue文を使ったエラーハンドリング

continue文を使用して、エラーが発生した場合に処理をスキップすることができます。

以下は、数値のリストを処理し、数値以外の入力をスキップする例です。

for value in 1 2 a 4 5; do
    if ! [[ $value =~ ^[0-9]+$ ]]; then
        continue  # 数値でない場合は次の反復へ
    fi
    echo "Processing number: $value"
done
Processing number: 1
Processing number: 2
Processing number: 4
Processing number: 5

continue文を使う際の注意点

無限ループに注意

continue文を使用する際には、無限ループに陥る可能性に注意が必要です。

特に、ループの条件が適切に更新されない場合、continue文によってループが永遠に続くことがあります。

以下の例では、iの値が更新されないため、無限ループが発生します。

i=1
while [ $i -le 10 ]; do
    if [ $i -eq 5 ]; then
        continue  # 5の場合は次の反復へ
    fi
    echo $i
    # iの値が更新されていないため、無限ループになる
done

このような状況を避けるためには、continue文を使用する際に、ループの条件が適切に更新されることを確認することが重要です。

continue文の使いすぎによる可読性の低下

continue文を多用すると、スクリプトの可読性が低下する可能性があります。

特に、複雑な条件分岐やネストされたループの中でcontinue文を多く使用すると、コードの流れが分かりにくくなります。

以下の例では、continue文が多用されており、処理の流れが把握しづらくなっています。

for i in {1..10}; do
    if [ $i -eq 2 ]; then
        continue
    fi
    if [ $i -eq 5 ]; then
        continue
    fi
    if [ $i -eq 8 ]; then
        continue
    fi
    echo $i
done

このような場合は、条件をまとめて1つのif文にすることで、可読性を向上させることができます。

continue文とスクリプトのパフォーマンス

continue文自体は軽量な命令ですが、ループの中で頻繁に使用される場合、スクリプト全体のパフォーマンスに影響を与えることがあります。

特に、大量のデータを処理する際に、continue文が多く含まれると、処理速度が遅くなる可能性があります。

以下の例では、無駄なcontinue文が多く含まれており、パフォーマンスに影響を与えています。

for i in {1..100000}; do
    if [ $((i % 2)) -ne 0 ]; then
        continue  # 奇数の場合は次の反復へ
    fi
    # 偶数の処理
done

このような場合は、条件を見直し、必要な処理を効率的に行うように工夫することが重要です。

よくある質問

continue文とbreak文はどのように使い分けるべき?

continue文とbreak文は、ループ処理を制御するための異なる命令です。

continue文は、現在の反復をスキップして次の反復に移行するのに対し、break文はループ全体を終了させます。

使い分けのポイントは以下の通りです。

  • continue文: 特定の条件を満たす場合に、次の反復に進む必要があるときに使用します。
  • break文: ループを完全に終了させたい場合に使用します。

例えば、条件が満たされた場合にループを終了する場合などです。

continue文を使わずに同じ処理を実現する方法は?

continue文を使わずに同じ処理を実現するには、条件分岐を工夫することができます。

例えば、continue文を使用して特定の値をスキップする場合、if文の中で処理を行うことで同様の結果を得ることができます。

以下は、continue文を使わずに特定の値をスキップする例です。

for i in {1..10}; do
    if [ $i -ne 4 ]; then
        echo $i  # 4以外の値を出力
    fi
done

continue文を使うとパフォーマンスに影響はある?

continue文自体は軽量な命令ですが、ループ内で頻繁に使用される場合、スクリプト全体のパフォーマンスに影響を与えることがあります。

特に、大量のデータを処理する際に、continue文が多く含まれると、処理速度が遅くなる可能性があります。

ただし、適切に使用すれば、パフォーマンスへの影響は最小限に抑えられます。

最適化のためには、条件を見直し、無駄な処理を避けることが重要です。

まとめ

この記事では、Bashにおけるcontinue文の使い方やその応用例、注意点について詳しく解説しました。

continue文は、ループ処理の中で特定の条件を満たす場合に次の反復に移行するための重要な命令であり、適切に使用することでスクリプトの効率を向上させることができます。

今後は、実際のスクリプト作成においてcontinue文を活用し、より柔軟で効率的なコードを書くことを目指してみてください。

  • URLをコピーしました!
目次から探す