whileループのサンプル

シェルスクリプトのwhileループのサンプルを以下に記します。 サンプル例としては、無限ループ、ある値までの条件ループについて記述します。 尚、利用したシェルはbashになります。


スポンサーリンク

関連記事

whileで無限ループ

whileで無限ループを実現するには、:(コロン)または、trueを条件として記述します。
以下の2つのサンプルソースは同じです。

条件として:(コロン)とtrueを利用しています。
意味を知りたい場合は、以下の記事を参考にしてください。

whileの条件ループ

whileの条件ループについて以下に記します。
判定方法は以下のif文を利用したサンプルと同様になっています。

while条件ループ - 数値比較編

下表に記す文字列により、数値比較ができます。

-eq等しいかをチェック 数値 = 数値equal
-ne異なるかをチェック 数値 ≠ 数値not equal
-lt数値 < 数値をチェックless than
-le数値 ≦ 数値をチェックless than or equal
-gt数値 > 数値をチェックgreater than
-ge数値 ≧ 数値をチェックgreater than or equal

-eq のサンプルスクリプト (数値 = 数値)

以下のサンプルスクリプトは、変数$iが0の時にwhileループ内を実行します。
変数$jがループ毎に+1され、5になったときに$iが+1されwhileループの条件が成立せずにwhileループを抜けます。

#!/bin/bash

# -eq : equal
i=0
j=0
while [ $i -eq 0 ]
do
  j=`expr $j + 1`
  if [ $j -eq 5 ]; then
    i=`expr $i + 1`
  fi
  echo "(-eq : equal) i=$i, j=$j"
done

-ne のサンプルスクリプト (数値 ≠ 数値)

以下のサンプルスクリプトは、変数$iが5以外の時にwhileループ内を実行します。
ループ毎に$iが+1され、$iが5になった時点でwhileループの条件が成立せずにwhileループを抜けます。

#!/bin/bash

# -ne : not equal
i=0
while [ $i -ne 5 ]
do
  i=`expr 1 + $i`
  echo "(-ne : not equal) i=$i"
done

-lt のサンプルスクリプト (数値 < 数値)

以下のサンプルスクリプトは、変数$iが5未満の時にwhileループ内を実行します。
ループ毎に$iが+1され、$iが5になった時点でwhileループの条件が成立せずにwhileループを抜けます。

#!/bin/bash

# -lt : less than
i=0
while [ $i -lt 5 ]  # $i < 5
do
  echo "(-lt : less than) : $i"
  i=`expr $i + 1`
done

-le のサンプルスクリプト (数値 ≦ 数値)

以下のサンプルスクリプトは、変数$iが5未満の時にwhileループ内を実行します。
ループ毎に$iが+1され、$iが5より大きな値になった時点でwhileループの条件が成立せずにwhileループを抜けます。

#!/bin/bash

# -le : less than or equal
i=0
while [ $i -le 5 ]  # $i <= 5
do
  echo "(-le : less than or equal) : $i"
  i=`expr $i + 1`
done

-gt のサンプルスクリプト (数値 > 数値)

以下のサンプルスクリプトは、変数$iに10を初期値として代入し、$iが5より大きい値の時にwhileループ内を実行します。
ループ毎に$iが-1され、$iが5になった時点でwhileループの条件が成立せずにwhileループを抜けます。

#!/bin/bash

# -gt : greater than
i=10
while [ $i -gt 5 ]  # $i > 5
do
  echo "(-gt : greater than) : $i"
  i=`expr $i - 1`
done

-ge のサンプルスクリプト (数値 ≧ 数値)

以下のサンプルスクリプトは、変数$iに10を初期値として代入し、$iが5以上の時にwhileループ内を実行します。
ループ毎に$iが-1され、$iが4になった時点でwhileループの条件が成立せずにwhileループを抜けます。

#!/bin/bash

# -ge : greater than or equal
i=10
while [ $i -ge 5 ]  # $i >= 5
do
  echo "(-gt : greater than) : $i"
  i=`expr $i - 1`
done

while条件ループ - 文字列比較編

以下に文字列比較によるwhileループのサンプルを記述します。

文字列による比較 (not equal)

変数$sが='aaaaa'になるまでwhileループ内を実行します。

#!/bin/bash

s='a'
while [ $s != 'aaaaa' ]
do
  echo "str.sh s=$s"
  s="${s}a"
done

文字列による比較 (equal)

$ cat ./str-eq.sh 
#!/bin/bash

s='a'
while [ $s = 'a' ]
do
  echo "str.sh s=$s"
  s="${s}a"
done

文字列長さの比較

下表に記す文字列により、文字列長の確認ができます。

-n文字列の長さが0以外(つまり空ではない)の場合は真
-z文字列の長さが0(つまり空)の場合は真

-z のサンプルスクリプト

変数$sが空の間、whileループ内を処理します。

#!/bin/bash

s=''
while [ -z "$s" ]
do
  echo "s : $s"
  s=${s}a
done

-n のサンプルスクリプト

変数$sを1文字ずつcutコマンドで削除しが変数$sが空になるまで、whileループ内を処理します。

#!/bin/bash

s="linux"
len=`expr length $s`
while [ -n "$s" ]
do
  echo "s : $s"
  if [ $len -ne 0 ]; then
    s=`echo $s | cut -c 1-$len`
    len=`expr $len - 1`
  else
    s=''
  fi
done

複数の条件式にする場合

下表に記す文字列により、複数の条件式を記述することができます。

-aand 条件式 -a 条件式 ...
-oor 条件式 -o 条件式 ...

-a のサンプルスクリプト (and)

以下のサンプルスクリプトは以下の条件式が成立する間、whileループ内を処理します。

$a < 5 and $b < 10
#!/bin/bash

a=0
b=1
while [ $a -lt 5 -a $b -lt 10  ] # $a < 5 and $b < 10
do
  echo "a=$a, b=$b"
  a=`expr $a + 1`
  b=`expr $b + 1`
done

-o のサンプルスクリプト (or)

以下のサンプルスクリプトは以下の条件式が成立する間、whileループ内を処理します。

$a < 5 or $b < 10
#!/bin/bash

a=0
b=1
while [ $a -lt 5 -o $b -lt 10  ] # $a < 5 or $b < 10
do
  echo "a=$a, b=$b"
  a=`expr $a + 1`
  b=`expr $b + 1`
done

スポンサーリンク


添付ファイル: fileeq.sh 1243件 [詳細] filege.sh 923件 [詳細] filele.sh 1079件 [詳細] filelt.sh 1176件 [詳細] filene.sh 1083件 [詳細] fileor.sh 959件 [詳細] filestr-n.sh 967件 [詳細] filestr-ne.sh 1083件 [詳細] fileand.sh 967件 [詳細] filegt.sh 1002件 [詳細] filestr-eq.sh 1013件 [詳細] filestr-z.sh 960件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-03-08 (土) 17:17:11