シェルスクリプトで無限ループや回数指定でなにか処理をさせたいときのメモ。
1秒ごとに日付を表示する
#!/bin/sh
while true
do
sleep 1
date
done
dateコマンドのところを自由に書けば良い。
秒単位ではなくもっと刻みたい場合は、usleepを使う。(usleepはマイクロ秒指定であることに注意)
60秒間だけ日付を表示する
#!/bin/sh
for i in `seq 1 60`
do
sleep 1
date
done
sleep 1しているから60秒間になるが、sleep 1しなければ60回実行するという意味になる。
起動
起動はバックグラウンドでもフォアグラウンドでも。
下記はバッググラウンドの例。
$ ./loop.sh &
停止
バックグラウンドで起動している場合はkillall
$ killall loop.sh
killallで止まらない場合は、-9 で強制終了。
$ killall -9 loop.sh
フォアグラウンドで起動している場合は、Ctl+Cで止める。
$ ./loop.sh
Wed Sep 25 20:50:02 JST 2019
Wed Sep 25 20:50:04 JST 2019
Wed Sep 25 20:50:05 JST 2019
Wed Sep 25 20:50:06 JST 2019
^C
$
Ctl+Cで止まらない場合は、Ctl+Zでサスペンドしてコンソールを抜けてから、killallする。