Just because you can do something doesn’t mean that you should do it. I try and keep to that simple rule but from time to time it is fun to see what crazy things you can do in a simple shell script.
Easter is one of those holidays that does not fall on a fixed date each year. There is a fairly complicated formula to calculate the Easter weekend.
All that is needed to calculate Easter is integer math. I described how to perform simple math in a bash shell in a previous blog entry.
# https://en.wikipedia.org/wiki/Computus
# anonymous Gregorian algorithm
twodig()
{
retval=$1
if [ $1 -lt 10 ]
then
retval=0$1
fi
echo $retval
}
easter()
{
Y=$1
a=$(( $Y % 19 ))
b=$(( $Y / 100 ))
c=$(( $Y % 100 ))
d=$(( $b / 4 ))
e=$(( $b % 4 ))
f=$(( ($b + 8) / 25 ))
g=$(( ($b - $f + 1) / 3 ))
h=$(( (19 * $a + $b - $d - $g + 15) % 30 ))
i=$(( $c / 4 ))
k=$(( $c % 4 ))
l=$(( (32 + 2 * $e + 2 * $i - $h - $k) % 7 ))
m=$(( ($a + 11 * $h + 22 * $l) / 451 ))
month=$(( (($h + $l - 7 * $m + 114) / 31) ))
month=`twodig $month`
day=$(( (($h + $l - 7 * $m + 114) % 31) + 1 ))
day=`twodig $day`
echo $Y$month$day
}
for i in 2008 2009 2010 2011 2012 2013 2014 2015
do
easter $i
done