#!/bin/bash echo "Enter your YEAR and MONTH" #変数としてyearとmonthを読み込み echo YEAR read YEAR echo MONTH read MONTH if [ $YEAR -lt 1 -o $YEAR -gt 9999 ] #入力された年が1~9999の範囲にないと then echo " enter the nunber bet 1-9999" #文句を言って exit #終了 elif [ $MONTH -lt 1 -o $MONTH -gt 12 ] #入力された月が1~12の範囲にないと then echo " enter the nunber bet 1-12" #終了 exit fi echo $YEAR"年"$MONTH"月" cal=("日" "月" "火" "水" "木" "金" "土") #calに曜日の部分を作る X=`expr $((YEAR % 4))` if [ $MONTH = 1 ] [ $MONTH = 3 ] [ $MONTH = 5 ] [ $MONTH = 7 ] [ $MONTH = 10 ] [ $MONTH =12 ] #ツェラーの公式の準備 と計算をしています then y=`expr $((YEAR - 1))` m=`expr $((MONTH + 12))` y1=`expr $((y / 4))` #exprで計算し剰余を求めます 以下で使いまわします y2=`expr $((y / 100))` y3=`expr $((y / 400))` m1=`expr $((((m * 13) + 8) / 5))` s=`expr $(((y + y1 - y2 + y3 + m1 + 1) % 7))` sp=`expr $s` t=1 while : do if [ $t -gt $sp ] then break fi u=`expr $t + 6` #空白を作っています cal[$u]=" " t=`expr $t + 1` done t=1 #1 3 5 7 10 12月は31までなのでこのように指定します v=31 while : do if [ $t -gt $v ] then break fi u=`expr $t + 6 + $sp` cal[$u]=$t t=`expr $t + 1` done printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" カレンダー本体を出力します elif [ $MONTH = 2 ] then if [ $X = 0 ] then y=`expr $((YEAR - 1))` m=`expr $((MONTH + 12))` y1=`expr $((y / 4))` y2=`expr $((y / 100))` y3=`expr $((y / 400))` m1=`expr $((((m * 13) + 8) / 5))` s=`expr $(((y + y1 - y2 + y3 + m1 + 1) % 7))` sp=`expr $s` t=1 while : do if [ $t -gt $sp ] then break fi u=`expr $t + 6` cal[$u]=" " t=`expr $t + 1` done t=1 v=29 #2月は29にちまで while : do if [ $t -gt $v ] then break fi u=`expr $t + 6 + $sp` cal[$u]=$t t=`expr $t + 1` done printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" else y=`expr $((YEAR - 1))` m=`expr $((MONTH + 12))` y1=`expr $((y / 4))` y2=`expr $((y / 100))` y3=`expr $((y / 400))` m1=`expr $((((m * 13) + 8) / 5))` s=`expr $(((y + y1 - y2 + y3 + m1 + 1) % 7))` sp=`expr $s` t=1 while : do if [ $t -gt $sp ] then break fi u=`expr $t + 6` cal[$u]=" " t=`expr $t + 1` done t=1 v=29 while : do if [ $t -gt $v ] then break fi u=`expr $t + 6 + $sp` cal[$u]=$t t=`expr $t + 1` done printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" fi elif [ $MONTH = 4 ] || [ $MONTH = 6 ] || [ $MONTH = 9 ] || [ $MONTH = 11 ] then y=`expr $YEAR` m=`expr $MONTH` y1=`expr $((y / 4))` y2=`expr $((y / 100))` y3=`expr $((y / 400))` m1=`expr $((((m * 13) + 8) / 5))` s=`expr $(((y + y1 - y2 + y3 + m1 + 1) % 7))` sp=`expr $s` t=1 while : do if [ $t -gt $sp ] then break fi u=`expr $t + 6` cal[$u]=" " t=`expr $t + 1` done t=1 # 4 6 9 11月は30にちまでなので v=30 while : do if [ $t -gt $v ] then break fi u=`expr $t + 6 + $sp` cal[$u]=$t t=`expr $t + 1` done printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" else y=`expr $YEAR` m=`expr $MONTH` y1=`expr $((y / 4))` y2=`expr $((y / 100))` y3=`expr $((y / 400))` m1=`expr $((((m * 13) + 8) / 5))` s=`expr $(((y + y1 - y2 + y3 + m1 + 1) % 7))` sp=`expr $s` t=1 while : do if [ $t -gt $sp ] then break fi u=`expr $t + 6` cal[$u]=" " t=`expr $t + 1` done t=1 v=31 while : do if [ $t -gt $v ] then break fi u=`expr $t + 6 + $sp` cal[$u]=$t t=`expr $t + 1` done printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" fi echo $YEAR"年"$MONTH"月" > quiz2.txt printf "%2s %2s %2s %2s %2s %2s %2s\n" "${cal[@]}" >> quiz2.txt #quiz2.txtに出力します