Linuxのシェルスクリプトのwhile文のサンプルです。条件で処理の繰り返しを制御します。
目次
サンプル | while文とは / while文のサンプル |
ループを抜ける(break) | |
ループの先頭に戻る(continue) | |
while文で配列を使用する | |
ファイルを読み取り1行ずつ実行する(read) | |
オプションを受け取って処理を行う(getopts) | |
数値の比較演算子 |
while文とは
while [条件式] do 処理 done |
- 条件式がtrueの間、処理を繰り返します。
- 条件式がfalseの場合、処理を終了します。
- 最初の条件の判定でfalseの場合、処理を1回も実行しません。
- 処理に条件式をfalseにするロジックがないと無限ループになるので注意が必要です。
while文のサンプル
#!/bin/bash
i=0
while [ $i -lt 5 ]
do
echo $i # 0 1 2 3 4
((i++))
done
4行目は値が5より小さい間、処理を繰り返します。
7行目は、条件になる値を加算しています。
ループを抜ける(break)
#!/bin/bash
i=0
while :
do
if [ $i -eq 3 ]; then
break
fi
echo $i # 0 1 2
((i++))
done
4行目は、条件式がなくコロンです。このままの場合は無限ループになります。
7行目のbreakでwhile文を抜けます。
breakがないと無限ループになるので注意が必要です。
ループの先頭に戻る(continue)
#!/bin/bash
i=0
while [ $i -lt 5 ]
do
if [ $i -eq 3 ]; then
((i++))
continue
fi
echo $i # 0 1 2 4
((i++))
done
8行目のcontinueは、次は4行目を実行します。そのため10行目は実行されません。
このサンプルでは7行目の加算がないと無限ループになるので注意して下さい。
while文で配列を使用する
#!/bin/bash
color=(red yellow blue)
i=0
while [ $i -lt ${#color[@]} ]
do
echo "$n ${color[$i]}" # red yellow blue
((i++))
done
2行目は、配列です。
5行目の-ltの右側は、配列の要素数を取得しています。
ファイルを読み取り1行ずつ実行する(read)
シェルと同じディレクトリにある以下のtest1.txtを読み取りシェルを実行します。
test1.txt
red-text yellow-text blue-text |
#!/bin/bash
while read line
do
echo $line # red-text yellow-text blue-text
done < test1.txt
5行目にファイルのtest1.txtがあります。
ファイルを1行読み取ると1行目の変数lineにセットされます。
ファイルの最終行まで読み取るとループ処理は終了します。
オプションを受け取って処理を行う(getopts)
#!/bin/bash
while getopts a:b:c: OPT
do
case "$OPT" in
a)echo "a = ${OPTARG}";;
b)echo "b = ${OPTARG}";;
c)echo "c = ${OPTARG}";;
esac
done
getoptsはコマンドです。
以下のようにオプション(a,b,c)と引数を指定して実行できます。
./test1.sh -a 11 -c 33
./test1.sh -a 11 -b 22 -c 33
数値の比較演算子
数値比較演算子は、2つの値を比べて条件を満たしていればtrue,そうでない場合はfalseを返します。
比較演算子 | 説明 |
---|---|
a -eq b | aとbの値は等しい |
a -ne b | aとbの値は等しくない |
a -gt b | aはbより大きい |
a -ge b | aはbより大きい または 等しい |
a -lt b | aはbより小さい |
a -le b | aはbより小さい または 等しい |
関連の記事