#!/bin/sh echo "Enter your year" #年を入力させる read yr #年を読み込む echo "Enter your month" #月を入力させる read mn #月を読み込む if [ $mn -lt 1 ] #もし月が1より小さければ then echo "your manth is wrong" #間違いを指摘する fi if [ $mn -gt 12 ] #もし月が13より大きければ then echo "your manth is wrong" #間違いを指摘する fi #以下ツェラーの公式の計算 if [ $mn -lt 3 ] #もし月が1月か2月なら then yrn=`expr $yr - 1` #前年の mnn=`expr $mn + 12` #13月・14月にする else #それ以外なら yrn=$yr #そのまま mnn=$mn fi J=`expr $yrn / 100` #年の上2ケタを取り出す K=`expr $yrn % 100` #年の下2ケタを取り出す q=1 #1日の曜日を調べる ha=`expr $mnn + 1` #以下ツェラーの公式の計算 hb=`expr $ha \* 26` hc=`expr $hb / 10` hd=`expr $K / 4` he=`expr $J / 4` hf=`expr $J \* 2` HI=`expr $q + $hc + $K + $hd + $he - $hf` H=`expr $HI % 7` #曜日が求まる if [ "$H" -lt 0 ] #さきほどの計算では、値が負になっているため then HK=`expr $H + 7` #正に直す else HK=$H fi if [ $mn -eq 4 -o $mn -eq 6 -o $mn -eq 9 -o $mn -eq 11 ] #もし4・6・9・11月なら then mnr=30 #30日に設定 else mnr=31 #それ以外は31日に設定 fi #以下うるう年の処理 yrA=`expr $yr % 4` #うるう年を割り出す yrB=`expr $yr % 100` yrC=`expr $yr % 400` if [ $mn -eq 2 ] #もし2月なら28日に設定 then mnr=28 fi if [ $mn -eq 2 -a $yrA -eq 0 ] #もしうるう年なら then mnr=29 #29日に設定 fi if [ $mn -eq 2 -a $yrB -eq 0 ] #もし100年に一度のうるう年でない年なら then mnr=28 #28日に設定 fi if [ $mn -eq 2 -a $yrC -eq 0 ] #もし400年に一度のうるう年なら then mnr=29 #29日に設定 fi #以下カレンダー作成 sp=`expr $HK - 1` #カレンダー1行目の空白を出す。 if [ "$HK" -eq 0 ] then sp=6 fi spa=1 #カレンダー1行目の空白を並べる while : do if [ "$spa" -gt "$sp" ] then break fi cn=`expr $spa + 6` cal[$cn]=" " spa=`expr $spa + 1` done spa=1 #1日から並べ始める while : #以下日にちを並べていく作業 do if [ "$spa" -gt "$mnr" ] then break fi cn=`expr $spa + 6 + $sp` cal[$cn]=$spa spa=`expr $spa + 1` done echo " $yr $mn " > quiz2.txt #年月を出力 printf "%s %s %s %s %s %s %s\n" 日 月 火 水 木 金 土 >> quiz2.txt #曜日を出力 printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" >> quiz2.txt #日にちを出力 echo " $yr $mn " printf "%s %s %s %s %s %s %s\n" 日 月 火 水 木 金 土 printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}"