Bash Shell - スリープ関数、特定の時間を停止する

LinuxのBashシェルスクリプトでsleepに一定時間休みの方法を紹介します。

1. Syntax

sleepコマンドは、引数として入力された時間だけsleepします。

sleep 'time'

時間は次のように数字+ s/m/hとして定義することができます。基本的には単位がsecondので、 1を入力すると、1sで処理されます。

  • 1s:1秒をの
  • 1m:1分をの
  • 1h:1時間をの
  • 10m 10s:10分10秒をの
  • 1h 10m 10s:1時間10分10秒をの

2. sleepの例

次の例は、3秒sleepする例です。時間を一緒に出力してsleepがうまく動作していることを確認することができます。

#!/bin/bash

time=`date +"%H:%M:%S"`
echo "Start at $time"

echo "wait for 3 seconds"

sleep 3s

time=`date +"%H:%M:%S"`
echo "Finish at $time"

Output:

$ bash example.sh
Start at 11:08:00
wait for 3 seconds
Finish at 11:08:03

3. sleepの例

次のように 1m 10sように他の単位の時間の組み合わせでsleepすることもできます。

#!/bin/bash

time=`date +"%H:%M:%S.%3N"`
echo "Start at $time"

echo "wait for 1m 10s seconds"

sleep 1m 10s

time=`date +"%H:%M:%S.%3N"`
echo "Finish at $time"

4. sleepの例

次の例は、0.1秒sleepする例です。基本的には時間の単位がsecondあるので、1秒未満の時間を休む時は 0.1sよう少数で時間を表現すると、されます。

#!/bin/bash

time=`date +"%H:%M:%S.%3N"`
echo "Start at $time"

echo "wait for 0.1 seconds"

sleep 0.1s

time=`date +"%H:%M:%S.%3N"`
echo "Finish at $time"

Output:

$ bash example.sh
Start at 11:21:25.326
wait for 0.1 seconds
Finish at 11:21:25.430

5. sleepの例

以下は、ループでsleepを使用した例です。同じ時間間隔でループからのジョブを処理することができます。

#!/bin/bash

a=0
while [ "$a" -lt 5 ]
do
  echo "Do something at $(date +"%H:%M:%S")"
  sleep 3

  a=$(expr $a + 1)
done

Output:

$ bash example.sh
Do something at 11:13:12
Do something at 11:13:15
Do something at 11:13:18
Do something at 11:13:21
Do something at 11:13:24

References

codechachaCopyright ©2019 codechacha