生成任意年份所有日期的Shell脚本

主要是对闰年平年、大月小月的处理

就是大月31天,小月30天

针对2月判断是闰年还是平年,润年29天,平年28天

脚本

使用方法,将代码保存为get_everyday.sh

然后执行bash get_everyday.sh 2020

日期格式为20200101~20201231这样的8位数字

它会保存到脚本同目录下的2020_everyday.txt

想要哪一年就将2020改为你需要的年份

没有针对年份参数处理,也就是你执行bash get_everyday.sh 0000之类的,会输出错误的年份,如果是传入字母、文字之类的参数,会把字母、文字当成年份输出。

比如执行bash get_everyday.sh abc,会输出abc0101~abc1231

get_Feb()
{
    year=$1
    let "y1=$year % 4"
    let "y2=$year % 100"
    let "y3=$year % 400"
    if [ ! "$y1" -eq 0 ]
    then
    leap=0
    elif [ ! "$y2" -eq 0 ]
    then
    leap=1
    elif [ "$y3" -eq 0 ]
    then
    leap=1
    else
    leap=0
    fi
    if [ "$leap" -eq 1 ]
    then
    echo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    else
    echo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
    fi
}
get_day()
{
    case $1 in
    01|03|05|07|08|10|12)
        echo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
        ;;
    02)
        echo $(get_Feb $year)
        ;;
    04|06|09|11)
        echo 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
        ;;
    *)
    esac
}
 
year=$1
for month in 01 02 03 04 05 06 07 08 09 10 11 12
do
    for day in $(get_day $month)
    do
        echo $year$month$day >> $year"_everyday.txt"
    done
done

 

原创文章,作者:陌涛,如若转载,请注明出处:https://imotao.com/4421.html

(0)
陌涛的头像陌涛
上一篇 2020年12月17日 下午8:29
下一篇 2020年12月18日 上午8:59

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据