shell脚本做万年历

要求》》》》》先搭框架

  • 输入一个命令,比如,,,mycal,显示现在的月的月份
  • 运用函数
  • 制作命令$#
  • 注意数组后是小括号。。。。

如何计算实际天数

  • 先计算有多少年,闰年乘以366.平年乘以365.
  • 函数的使用可以减少代码量
  • 数组的使用,注意是(),和c语言不一样。
  • 一般不在中括号里面加小括号,麻烦。
mycal()
{
    year=$1#-----------------------------》注意和相面的主函数呼应
    month=$2
    i=1990
    allday=0
#   echo "$year"
#   echo "$month"
    arrayday=(0 31 28 31 30 31 30 31 31 30 31 30 31)#---》数组是小括号,注意第一个是0,arrayday【0】开始。
    #-------------------------------------------------------how many days about year
    while [ $i -le $year ]
    do
        if [ `expr $year % 4` == 0 -a `expr $year % 100` != 0 ] || [ `expr $year % 400 ` == 0 ]
        then
            let allday+=366
        else
            let allday+=365
        fi
        let i++

    done
#   echo "$allday"
    if [ `expr $year % 4` == 0 -a `expr $year % 100` != 0 ] || [ `expr $year % 400 ` == 0 ]
    then
        arrayday[2]=29
    else
        arrayday[2]=28
    fi
    i=1
    #----------------------------------------------------how many days about month
    while [ $i -lt $month ]#--------》i么有意义,
    do
        let allday+=arrayday[i]
        let i++

    done

    let space=allday%7
    echo  "${space}"
    i=0
    printf "      ${year}   ${month}\n"
    printf "Sun  Mon  Tue  Wed  Thu  Fri  Sta\n"
    day=1
    while [ $i -lt $space ]
    do
        printf "     "
        let i++
    done
    while [ $day -le  ${arrayday[${month}]} ]#---->》注意里面的month
    do
        printf " $day  "
        if [ $day -le 9 ]
        then
            printf " "
        fi
        let kongge=day+space
        if [ `expr $kongge  % 7` == 0 ]
        then
            printf "\n"
        fi
        let day++
    done
}

if [ $# -eq 0 ]
then
    argument1=`date +%Y`
    argument2=`date +%m`
    mycal $argument1  $argument2
elif [ $# -eq  2 ]
then 
    argument1=$1
    argument2=$2
    mycal $argument1  $argument2
else 
    echo "please input in right rule"
fi
printf "\n"

你可能感兴趣的:(shell脚本做万年历)