68 lines
1.9 KiB
Text
68 lines
1.9 KiB
Text
|
#! /usr/bin/ksh
|
||
|
alias datecalc=/usr/local/bin/datecalc
|
||
|
|
||
|
# weekselector --- script to assist in scheduling cron jobs
|
||
|
# Perderabo Oct 11, 2003
|
||
|
#
|
||
|
# example:
|
||
|
# You want to run command1 on the first monday of each month and
|
||
|
# you want to run command2 on the last monday of each month.
|
||
|
# Just use this syntax:
|
||
|
#
|
||
|
# 0 0 * * 1 /usr/local/bin/weekselector 1st && command1
|
||
|
# 0 0 * * 1 /usr/local/bin/weekselector last && command2
|
||
|
#
|
||
|
# Version 2.0 March 23, 2005
|
||
|
#
|
||
|
# You can now use "even" or "odd" to run commands every other week.
|
||
|
# Whether or not a week is "even" or "odd" is arbitrary, but if one week
|
||
|
# is "odd", the next will be "even". An "even" Monday will be in the same
|
||
|
# week as an "even" Tuesday.
|
||
|
|
||
|
integer month day year first last leap
|
||
|
|
||
|
set -A mdy $(date "+%m %d %Y")
|
||
|
month=${mdy[0]}
|
||
|
day=${mdy[1]}
|
||
|
year=${mdy[2]}
|
||
|
#date "+%M %d %Y" | read month day year
|
||
|
|
||
|
case $1 in
|
||
|
even|Even|EVEN|odd|Odd|ODD)
|
||
|
integer dow mjd fmjd wk
|
||
|
dow=$(datecalc -d $year $month $day)
|
||
|
mjd=$(datecalc -j $year $month $day)
|
||
|
((fmjd=mjd-dow))
|
||
|
((wk=fmjd/7))
|
||
|
((wk=wk+${#1}))
|
||
|
((wk/2*2 == wk))
|
||
|
exit $?
|
||
|
;;
|
||
|
1|1st|1ST|first|First|FIRST) last=7 ;;
|
||
|
2|2nd|2ND|second|Second|SECOND) last=14 ;;
|
||
|
3|3rd|3RD|third|Third|THIRD) last=21 ;;
|
||
|
4|4th|4TH|fourth|Fourth|FOURTH) last=28 ;;
|
||
|
last|Last|LAST)
|
||
|
# ja fe ma ap ma jn jl ag se oc no de
|
||
|
set -A mlength xx 31 28 31 30 31 30 31 31 30 31 30 31
|
||
|
|
||
|
if ((month != 2)) ; then
|
||
|
last=${mlength[month]}
|
||
|
else
|
||
|
leap=0
|
||
|
if ((!(year%100))); then
|
||
|
((!(year%400))) && leap=1
|
||
|
else
|
||
|
((!(year%4))) && leap=1
|
||
|
fi
|
||
|
|
||
|
last=28
|
||
|
((leap)) && last=29
|
||
|
fi;;
|
||
|
*) exit 1;;
|
||
|
esac
|
||
|
((first=last-6))
|
||
|
|
||
|
((first<=day && day<=last))
|
||
|
exit $?
|