echo enter your year read year echo enter your month read month file=kadai2.txt touch kadai2.txt Y=$year M=$month echo $year年$month月 | tee $file printf "%4s %3s %3s %3s %3s %3s %3s\n" 日 月 火 水 木 金 土 | tee -a $file if [ $M = 1 ] || [ $M = 2 ] then m=`expr $((M+12))` else m=$M fi g=`expr $(($Y%4))` h=`expr $(($Y%100))` i=`expr $(($Y%400))` if [ $M = 2 ] #2月のとき then if [ $g = 0 ] #4で割ったあまりがゼロのとき、 then if [ $h = 0 ] #かつ100で割れたら閏年でない then if [ $i = 0 ] #ただし、400で割れたら閏年である then day=29 else day=28 fi else day=29 #4で割り切れて100で割り切れないなら閏年である。 fi else day=28 #4で割り切れないなら閏年でない。 fi #閏年の計算 else if [ $M = 4 ] || [ $M = 6 ] || [ $M = 9 ] || [ $M = 11 ] #4,6,9,11月なら30日までである。 then day=30 else day=31 #それ以外は31日までである。 fi fi a=`expr $((Y/4))` b=`expr $((Y/100))` c=`expr $((Y/400))` d=`expr $((m+1))` e=`expr $((26*d/10))` p=`expr $((Y+a-b+c+e))` q=`expr $((p%7))` #ツエラーの式の計算。qは1日のときのツエラーの式の値。 for n in `seq 1 $q` do printf " " | tee -a $file done #1日が始まるまで空白にする。 k=`expr $(($day-1))` for j in `seq 1 $k` #日数と同じ回数だけ日付を書いていく処理を実行する。 do f=`expr $((Y+a-b+c+e+j-1))` w=`expr $((f%7))` #qとちがい、wは1日以外の日付も含むツエラーの式の値。 case $w in 6 ) printf "%3d\n" $j | tee -a $file ;; #wをつかって、1日からその月の日数までプリントしていく。 * ) printf "%3d" $j | tee -a $file ;; #wが6なら(土曜日なら)改行も行う。 esac done printf "%3d\n" $day | tee -a $file #月の最後の日は改行処理をしたいので別でプリントの指示をだした。