ども、シローです。

今回はシェルスクリプトで、while文until文の書き方について整理していきます。

基本的な文法

while文

while [[ 条件式 ]]  do    繰り返し処理  done  

until文

until [[条件式 ]]  do    繰り返し処理  done  

 

解説

while文:条件式を満たしている間、do ~ doneの処理を繰り返す

while文は [[ ]]の間の条件を満たしている間は同じ処理を繰り返します。

for文はリストの中身を取り出して、全ての要素に対して特定の処理をすることに向いていますが

while文は特定の条件になるまでは無限ループしたいという状況に使えると個人的には考えています。

例:

  • 特定のファイルが作成されるまで、待機する
  • 特定のプロセスが終了するまで、待機する

特定のファイルが存在するかチェックするプログラム

while_file_created.sh

#!/bin/bash    file_exists=0;    while [[ $file_exists -lt 1 ]]  do    sleep 5;      if [ -e /tmp/sample_file.txt ];then      echo "File Found";      file_exists=1;    else      echo "File NotFound";    fi  done  

until文:特定の条件を満たすまで、特定の処理を繰り返す

until文は[[ ]] の中身の条件に達するまではは特定の処理を繰り返します。

while文とは[[ ]]の条件の判定が逆になっていることが多いです。

先程の特定のファイルが存在するまで無限ループするプログラムをuntil文に置き換えるとこのようになります。

until_file_created.sh

#!/bin/bash    until [[ -e /tmp/sample_file.txt ]]  do    sleep 5;    echo "File NotFound";  done    echo "File Found";

 

まとめ

  • while文は[[ ]]の条件を満たしている間はdo ~ doneの処理を繰り返す
  • until文は[[ ]]の条件を満たしている間はdo ~ doneの処理を繰り返す