Linux while文 処理を繰り返す(シェルスクリプト)

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より小さい または 等しい

関連の記事

Linux If文 条件分岐を行う(シェルスクリプト)

△上に戻る