#!/bin/bash txt=quiz2.txt #出力するファイルを指定 echo month? read m1 #月を入力 echo year? read y1 #年を入力 echo $y1 $m1 |tee $txt #年と月を表示 printf "%3s %3s %3s %3s %3s %3s %3s\n" 日 月 火 水 木 金 土 |tee -a $txt #曜日を表示 if [ $m1 = 1 ]||[ $m1 = 2 ] then y=`expr $((y1 - 1))` m=`expr $((m1 + 12))` #もし1月か2月だったら年を1引いて月に12足す else y=`expr $y1` m=`expr $m1` #それ以外ならそのまま fi n=1 a=`expr $((y / 4))` #年を4で割った答えの整数部分をaとする b=`expr $((y / 100))` #年の前2ケタをbとする c=`expr $((y / 400))` #年を400で割った解の整数部分をcとする d=`expr $((m * 13))` #月に13をかけたものをdとする e=`expr $((d + 8))` #dに8を足したものをeとする f=`expr $((e / 5))` #eを5で割った解の整数部分をfとする g=`expr $((y + a - b + c + f + n))` #これらを足したり引いたりしたもをのgとする h=`expr $((g % 7))` #gを7で割った余りをhとする #h=0なら日曜日h=1なら月曜日、h=2なら火曜日、h=3なら水曜日、h=4なら木曜日、h=5なた金曜日、h=6なら土曜日 if [ $m = 13 ]||[ $m = 3 ]||[ $m = 5 ]||[ $m = 7 ]||[ $m = 8 ]||[ $m = 10 ]||[ $m = 12 ];then #もし1,3,5,7,8,10,12月なら DATE=32 #引き数DATEは32 elif [ $m = 4 ]||[ $m = 6 ]||[ $m = 9 ]||[ $m = 11 ] #もし4,6,9,11月なら then DATE=31 #引き数DATEは31 elif [ $m = 14 ];then #もし2月なら if [ `expr $((y % 4))` = 3 ];then #もしうるう年なら DATE=30 #引き数DATEは30 else DATE=29 #そうでないなら29 fi fi case $h in #ツェラーの公式の結果hの値によって場合分け 0)z=1 ;; 1)printf "%5d %2d %2d %2d %2d %2d\n" 1 2 3 4 5 6 |tee -a $txt z=7;; 2)printf "%8d %2d %2d %2d %2d\n" 1 2 3 4 5 |tee -a $txt z=6;; 3)printf "%11d %2d %2d %2d\n" 1 2 3 4 |tee -a $txt z=5;; 4)printf "%14d %2d %2d\n" 1 2 3 |tee -a $txt z=4;; 5)printf "%17d %2d\n" 1 2 |tee -a $txt z=3;; 6)printf "%20d\n" 1 |tee -a $txt z=2;; esac #ツェラーの公式の結果より、最初の曜日を決め最初の週だけ出力。更に2週目の先頭に来る数字をzで指定 while test $z -lt $DATE #zがDATEの値よりも小さい限り続ける do if [ $z -le `expr $((DATE - 1))` ];then o=`expr $z` else o=' ' fi if [ `expr $((z + 1))` -le `expr $((DATE - 1))` ];then p=`expr $((z + 1))` else p=' ' fi if [ `expr $((z + 2))` -le `expr $((DATE - 1))` ];then q=`expr $((z + 2))` else q=' ' fi if [ `expr $((z + 3))` -le `expr $((DATE - 1))` ];then r=`expr $((z + 3))` else r=' ' fi if [ `expr $((z + 4))` -le `expr $((DATE - 1))` ];then s=`expr $((z + 4))` else s=' ' fi if [ `expr $((z + 5))` -le `expr $((DATE - 1))` ];then t=`expr $((z + 5))` else t=' ' fi if [ `expr $((z + 6))` -le `expr $((DATE - 1))` ];then u=`expr $((z + 6))` else u=' ' fi z=`expr $((z + 7))` printf "%2s %2s %2s %2s %2s %2s %2s\n" "$o" "$p" "$q" "$r" "$s" "$t" "$u" |tee -a $txt #z~z+6までをそれぞれ査定し、DATEより小さければそのまま出力。大きければ空白を出力する。zに7を足して再度出力する。 done