tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

[linux][memo]指定範囲内で処理を行う方法

バッチなんぞを作ってテストをしていると、例えば1月1日から3月10日の間で繰り返し実行させたいとかたまに思ったりします。

でも、たまにしかないのでいっつもバッチ側をごにょごにょっとやってごまかしていましたが、今回は何度もそういうことをしなければいけなくなったので、呼び出し元のシェル側で範囲指定する方法を調べてみました。

数値で範囲を指定する方法

seqというステキなコマンドがあるので、それを使えばよろしい。簡単。

#/bin/bash

for i in `seq $1 $2 $3`; do
  echo "exec.sh /path/to/${i}"
done
$ ./seq.sh 0 1 3
exec.sh /path/to/0
exec.sh /path/to/1
exec.sh /path/to/2
exec.sh /path/to/3

日付で範囲を指定する方法

dateコマンドに色々オプションを付けるとそれぽっくできる。

#!/bin/bash

P=$1
E=$2
while true; do
  echo "exec.sh /path/to/${P}"
  if [ ${P} = ${E} ]; then
    break;
  fi
  P=`date "+%Y-%m-%d" -d "${P} 1day"`
done
$ ./date.sh 2009-03-29 2009-04-01
exec.sh /path/to/2009-03-29
exec.sh /path/to/2009-03-30
exec.sh /path/to/2009-03-31
exec.sh /path/to/2009-04-01