# usage: leap_year # 判断是否闰年 # 如果yyyy是闰年,退出码为0;否则非0 # 典型示例如下: # if leap_year 2010; then # echo "2010 is leap year"; # fi # if leap_year 2008; then # echo "2008 is leap year"; # fi # 摘自脚本:datetime_util.sh (2007.06.11) # 注:这个脚本来自网络,略有修改(原脚本从标准输入获取年份,现改成通过参数指定) # Shell program to read any year and find whether leap year or not # ----------------------------------------------- # Copyright (c) 2005 nixCraft project # This script is licensed under GNU GPL version 2.0 or above # ------------------------------------------------------------------------- # This script is part of nixCraft shell script collection (NSSC) # Visit http://bash.cyberciti.biz/ for more information. # ------------------------------------------------------------------------- leap_year() { # store year yy=$1 isleap="false"
#echo -n "Enter year (yyyy) : " #read yy
# find out if it is a leap year or not
if [ $((yy % 4)) -ne 0 ] ; then : # not a leap year : means do nothing and use old value of isleap elif [ $((yy % 400)) -eq 0 ] ; then # yes, it's a leap year isleap="true" elif [ $((yy % 100)) -eq 0 ] ; then : # not a leap year do nothing and use old value of isleap else # it is a leap year isleap="true" fi #echo $isleap if [ "$isleap" == "true" ]; then # echo "$yy is leap year" return 0 else # echo "$yy is NOT leap year" return 1 fi }
# usage: validity_of_date # 判断yyyy-mm-dd是否合法的日期 # 如果是,退出码为0;否则非0 # 典型示例如下: # if validity_of_date 2007 02 03; then # echo "2007 02 03 is valid date" # fi # if validity_of_date 2007 02 28; then # echo "2007 02 28 is valid date" # fi # if validity_of_date 2007 02 29; then # echo "2007 02 29 is valid date" # fi # if validity_of_date 2007 03 00; then # echo "2007 03 00 is valid date" # fi # 摘自脚本:datetime_util.sh (2007.06.11) # 注:这个脚本来自网络,略有修改(原脚本从标准输入获取年月日,现改成通过参数指定) # Shell program to find the validity of a given date # ----------------------------------------------- # Copyright (c) 2005 nixCraft project # This script is licensed under GNU GPL version 2.0 or above # ------------------------------------------------------------------------- # This script is part of nixCraft shell script collection (NSSC) # Visit http://bash.cyberciti.biz/ for more information. # ------------------------------------------------------------------------- validity_of_date() { # store day, month and year yy=$1 mm=$2 dd=$3
# store number of days in a month days=0
# get day, month and year #echo -n "Enter day (dd) : " #read dd
#echo -n "Enter month (mm) : " #read mm
#echo -n "Enter year (yyyy) : " #read yy
# if month is negative (<0) or greater than 12 # then it is invalid month if [ $mm -le 0 -o $mm -gt 12 ]; then #echo "$mm is invalid month." return 1 fi
# Find out number of days in given month case $mm in 1) days=31;; 01) days=31;; 2) days=28 ;; 02) days=28 ;; 3) days=31 ;; 03) days=31 ;; 4) days=30 ;; 04) days=30 ;; 5) days=31 ;; 05) days=31 ;; 6) days=30 ;; 06) days=30 ;; 7) days=31 ;; 07) days=31 ;; 8) days=31 ;; 08) days=31 ;; 9) days=30 ;; 09) days=30 ;; 10) days=31 ;; 11) days=30 ;; 12) days=31 ;; *) days=-1;; esac
# find out if it is a leap year or not
if [ $mm -eq 2 ]; then # if it is feb month then only check of leap year if [ $((yy % 4)) -ne 0 ] ; then : # not a leap year : means do nothing and use old value of days elif [ $((yy % 400)) -eq 0 ] ; then # yes, it's a leap year days=29 elif [ $((yy % 100)) -eq 0 ] ; then : # not a leap year do nothing and use old value of days else # it is a leap year days=29 fi fi
#echo $days
# if day is negative (<0) and if day is more than # that months days then day is invaild if [ $dd -le 0 -o $dd -gt $days ]; then #echo "$dd day is invalid" return 3 fi
# if no error that means date dd/mm/yyyy is valid one #echo "$dd/$mm/$yy is a vaild date" #echo "$yy-$mm-$dd is a valid date" #echo "valid" return 0 }
# usage: days_of_month # 获取yyyy年mm月的天数,注意参数顺序 # 比如:days_of_month 2 2007 结果是28 days_of_month() { # store day, month and year mm=$1 yy=$2
# store number of days in a month days=0
# get day, month and year #echo -n "Enter day (dd) : " #read dd
#echo -n "Enter month (mm) : " #read mm
#echo -n "Enter year (yyyy) : " #read yy
# if month is negative (<0) or greater than 12 # then it is invalid month if [ $mm -le 0 -o $mm -gt 12 ]; then #echo "$mm is invalid month." echo -1 return 1 fi
# Find out number of days in given month case $mm in 1) days=31;; 01) days=31;; 2) days=28 ;; 02) days=28 ;; 3) days=31 ;; 03) days=31 ;; 4) days=30 ;; 04) days=30 ;; 5) days=31 ;; 05) days=31 ;; 6) days=30 ;; 06) days=30 ;; 7) days=31 ;; 07) days=31 ;; 8) days=31 ;; 08) days=31 ;; 9) days=30 ;; 09) days=30 ;; 10) days=31 ;; 11) days=30 ;; 12) days=31 ;; *) days=-1;; esac
# find out if it is a leap year or not
if [ $mm -eq 2 ]; then # if it is feb month then only check of leap year if [ $((yy % 4)) -ne 0 ] ; then : # not a leap year : means do nothing and use old value of days elif [ $((yy % 400)) -eq 0 ] ; then # yes, it's a leap year days=29 elif [ $((yy % 100)) -eq 0 ] ; then : # not a leap year do nothing and use old value of days else # it is a leap year days=29 fi fi
if leap_year 2010; then echo "2010年是闰年"; fi if leap_year 2008; then echo "2008年是闰年"; fi if validity_of_date 2007 02 03; then echo "2007 02 03 日期合法" fi if validity_of_date 2007 02 28; then echo "2007 02 28 日期合法" fi if validity_of_date 2007 02 29; then echo "2007 02 29 日期合法" fi if validity_of_date 2007 03 00; then echo "2007 03 00 日期合法" fi