Linux shellのfor文 処理を繰り返す(break/continue)

Linuxのshellのfor文で処理を繰り返すサンプルです。

目次

サンプル for文とは / for文のサンプル / for文のサンプル(seqを使用)
配列の値を取得
ループを抜ける(break) / 2重ループでbreakを使用
2重ループを抜ける(break 2)
ループの先頭に戻る(continue) / 2重ループでcontinueを使用

for文とは

  • 処理を繰り返す時に使用します。
  • 最初にforを書くのでfor文と呼ばれます。繰り返しはループとも呼ばれます。
  • 条件がtrueの間、処理を繰り返します。
  • 条件がfalseになるとループ処理を終了します。

shファイルの実行方法

以下のように複数の実行方法があります。

1.bash test1.sh
2.source test1.sh
3..test1.sh
4.chmodで実行権限を付与する chmod u+x test1.sh (u=所有者にx=実行権限を与える)

 

for文のサンプル

#!/bin/bash

for ((i=0; i<3; i++))
do
  echo $i # 0 1 2
done

3行目は、初期化式(i = 0)によりiは0から始まります。
増減式(i++)によりiの値は、1ずつ増えていきます。
条件式(i<3)がtrueの間は処理を繰り返し、iが3になるとfalseになるので終了します。

 

for文のサンプル(seqを使用)

#!/bin/bash

for i in `seq 0 2`
do
  echo $i # 0 1 2
done

3行目は、0から2まで処理を繰り返します。

 

配列の値を取得

!/bin/bash

color=(red yellow blue)

for i in ${!color[@]}
do
  echo ${color[$i]} # red yellow blue
done

3行目は、配列です。
7行目は、変数と添字[$i]で配列の値を表示しています。
配列の添字は0から始まります。

 

ループを抜ける(break)

breakでループを抜けるサンプルです。

#!/bin/bash

for ((i=0; i<3; i++))
do
    if [ $i -eq 1 ]; then
      break
    fi
    echo $i # 0
done

6行目のbreakでfor文を抜けます。

 

2重ループでbreakを使用

#!/bin/bash

for ((i=0; i<2; i++))
do
	for ((j=0; j<2; j++))
	do
	    if [ $j -eq 0 ]; then
	      break
	    fi
	    echo "j=" $j # なし
	done
	echo "i=" $i # i=0 i=1
done

3,5行目にfor文があり2重ループ(入れ子)になっています。
8行目のbreakは、内側のfor文のみ抜けます。

 

2重ループを抜ける(break 2)

#!/bin/bash

for ((i=0; i<9; i++))
do
	for ((j=0; j<9; j++))
	do
	    if [ $j -eq 3 ]; then
	      break 2
	    fi
	    echo "j=" $j # j=0 J=1 J=2
	done
	echo "i=" $i # なし
done

forがある2重ループです。
8行目のbreak 2で外側のfor文を抜けます。

 

ループの先頭に戻る(continue)

continueでループの先頭に戻るサンプルです。

#!/bin/bash

for ((i=0; i<3; i++))
do
    if [ $i -eq 1 ]; then
      continue
    fi
    echo $i # 0 2
done

6行目のcontinueでループ処理の先頭(3行目)に戻ります。0と2が出力されます。

 

2重ループでcontinueを使用

#!/bin/bash

for ((i=0; i<2; i++))
do
	for ((j=0; j<2; j++))
	do
	    if [ $j -eq 0 ]; then
	      continue
	    fi
	    echo "j=" $j # j=1 j=1
	done
	echo "i=" $i # i=0 i=1
done

4,6行目にfor文があり2重ループ(入れ子)になっています。
8行目のcontinueは、内側のfor文の先頭の5行目に戻ります。

continue 2とすると2重ループの先頭の3行目に戻ります。
上記例の場合処理結果は何もなしになります。

関連の記事

CentOS コマンド一覧 (Linux)

△上に戻る