#!/bin/bash echo "Enter your YEAR and MONTH" #"Enter your YEAR and MONTH"と表示する. echo YEAR #YEARと表示し,入力を促す. read YEAR #YEARに年を読み込む. echo MONTH #MONTHと表示し,入力を促す. read MONTH #MONTHに月を読み込む. echo $YEAR"年"$MONTH"月" cal=("日" "月" "火" "水" "木" "金" "土") #配列"cal"に曜日を作る. #各月ごとに,ツェラーの公式を計算する. X=`expr $YEAR % 4` Y=`expr $YEAR % 100` Z=`expr $YEAR % 400` if [ $MONTH = 1 ] #1月の場合. 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=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 ] #2月の場合(閏年の場合とそれ以外の場合を分けて考える.) then if [ $X = 0 ] || [ $Y = 0 ] || [ $Z != 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 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=28 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 ] #4,6,9,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 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 #3,5,7,8,10,12月の場合. 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"に出力する.