Linuxのシェルスクリプトの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行目に戻ります。
上記例の場合処理結果は何もなしになります。
関連の記事