#!/bin/sh # # dow shell script to calculate the day of the week. # Input data is passed either as command line arguments # or via standard input. # In both cases the moment of time can be given as # a Julian Day number or as day/month/year. # The option switch [-n] will suppress the newline # character which is normally output after the name # of the day. # # Usage: dow [ -n] # dow [-n] # dow [-n] - (use standard input) # declare -i DAY declare -i MONTH declare -i YEAR declare -i JD declare -i DOW if [ $# -eq 0 -o "$1" = "-help" -o "$1" = "-h" ] ; then echo 'Usage: dow
[-n]' 1>&2 echo ' dow [-n]' 1>&2 echo ' dow [-n] - (use standard input)' 1>&2 exit 1 fi # first case: day month & year given on the command line if [ $# -ge 3 ] ; then DAY=$[$1] MONTH=$[$2] YEAR=$[$3] if [ "$4" = "-n" ] ; then NEWLINE="-n" else NEWLINE= fi if [ $DAY -lt 1 -o $DAY -gt 31 ] ; then echo "dow: parameter #1 for day out of range" 1>&2 exit 1 fi if [ $MONTH -lt 1 -o $MONTH -gt 12 ] ; then echo "dow: parameter #2 for month out of range" 1>&2 exit 1 fi JD=`jd $DAY $MONTH $YEAR | cut -d . -f 1 -` #echo $JD fi # second case: Julian Day number given on command line if [ $# -le 2 -a "$1" != "-" -a "$2" != "-" ] ; then JD=`echo $1 | cut -d . -f 1 -` if [ $JD -eq 0 ] ; then echo "dow: Warning: Julian Day number 0 as input" 1>&2 fi if [ "$2" = "-n" ] ; then NEWLINE="-n" else NEWLINE= fi fi # third case: use standard input if [ "$1" = "-" -o "$2" = "-" ] ; then STDINP="`cat -`" NEWLINE=`echo "$STDINP" | sed -e '/-n/!d' \ -e 's/\(^[^-]*\)\(-n\)\(.*$\)/\2/g'` if [ "$1" = "-n" -o "$2" = "-n" ] ; then NEWLINE="-n" fi INSTRG=`echo "$STDINP" | sed -e 's/ */:/g' -e 's/^.*$/&:::/'` ARGA=`echo "$INSTRG" | cut -d : -f 1 -` ARGB=`echo "$INSTRG" | cut -d : -f 2 -` ARGC=`echo "$INSTRG" | cut -d : -f 3 -` if [ -z $ARGC ] ; then # Julian Day number input JD=`echo $ARGA | cut -d . -f 1 -` if [ $JD -eq 0 ] ; then echo "dow: Warning: Julian Day number 0 as input" 1>&2 fi else # day/month/year if [ $ARGA -lt 1 -o $ARGA -gt 31 ] ; then echo "dow: parameter #1 for day out of range" 1>&2 exit 1 fi if [ $ARGB -lt 1 -o $ARGB -gt 12 ] ; then echo "dow: parameter #2 for month out of range" 1>&2 exit 1 fi JD=`jd $ARGA $ARGB $ARGC | cut -d . -f 1 -` fi fi # echo "JD = $JD" let JD+=2 let DOW=$[ $JD % 7 ] case $DOW in 0) echo $NEWLINE "Sunday" ;; 1) echo $NEWLINE "Monday" ;; 2) echo $NEWLINE "Tuesday" ;; 3) echo $NEWLINE "Wednesday" ;; 4) echo $NEWLINE "Thursday" ;; 5) echo $NEWLINE "Friday" ;; 6) echo $NEWLINE "Saturday" ;; esac exit 0