首页 > 系统相关 >shell-验证日期

shell-验证日期

时间:2024-05-09 17:38:51浏览次数:27  
标签:shell 闰年 验证 31 days echo 日期 year fi

#!/bin/bash
#PATH=.:$PATH

exceedsDaysInMonth()
{

    #给定月份名称和天数,如果指定的天数小于或等于该月份的最大天数,
    #函数返回0;否则,返回1.
case $(echo $1|tr '[:upper:]' '[:lower:]' ) in 
    jan* ) days=31 ;; feb* ) days=28 ;;
    mar* ) days=31 ;; apr* ) days=30 ;;
    may* ) days=31 ;; jun* ) days=30 ;;
    jul* ) days=31 ;; aug* ) days=31 ;;
    seq* ) days=30 ;; oct* ) days=31 ;;
    nov* ) days=30 ;; dec* ) days=31 ;;
    *    ) echo "$0: Unknown month name $1" >&2
           exit 1
esac

if [ $2 -lt 1 -o $2 -gt $days   ];then
    return 1
else
    return 0
fi
}

isleapYear()
{
#如果指定的年份是闰年,该函数返回0;否则,返回1
#验证闰年的规则如下:
#1、不能被4整数的年份不是闰年
#2、能够被4和400整除的年份是闰年
#3、能够被4整除、不能被400整除,但是可以被100整除的年份不是闰年
#4、其他能够被4整除的年份不是闰年

year=$1
if [ "$((year % 4))" -ne 0  ];then
    return 1 #不是闰年
elif [ "$((  year % 400  ))" -eq 0  ];then
    return 0 # 是润年
elif [ "$((  year % 100  ))" -eq 0 ];then
    return 1
else
    return 0
fi

#主脚本开始
#+++++++++++++

if [  $# -ne 3  ];then
    echo "Usage:$0 month day year " >&2
    echo "Typical input formats are August 3 1962 and 8 3 1962" >&2
    exit 1
fi
#规范日期,保存返回值以提供错误检查
#注意:$*和$@都表示传递参数或者脚本全部参数;
#当$*和$@不加双引号时,两个没有区别,加了双引号后,"$*"表示传入的多个参数从整体上当做一份数据,
#“$@”表示加了双引号表示任然将多个参数当做多份传入

newdate="$($normdate "$@")"

if [ $? -eq 1    ];then
    exit 1 #错误情况已经由normdate报告过了。
fi

#拆分规范后的日期格式,其中第一个字段是月份,
#第二个字段是天数,第三个字段是年份。

month="$(echo $newdate | cut -d\ -f1)"
day="$(echo $newdate |cut -d\ -f2)"
year="$(echo $newdate |cut -d\ -f3)"

#现在来检车天数是否合法有效(例如,不能是1月36日)。
if ! execcdsDaysInMonth $month "$2" ; then
    if [ "$month" = "Feb" -a "$2" -eq "29"  ];then
        if ! isleapYear $3 ;then
            echo "$0: $3 is not a leap year,so Feb Doesn't have 29 days." >&2
            exit 1
        fi
    else
        echo "$0: bad day value: $month doesn't have $2 days." >&2
        exit 1
    fi
fi

echo "Valid date: $newdate"

exit 0

}

标签:shell,闰年,验证,31,days,echo,日期,year,fi
From: https://www.cnblogs.com/uutow/p/18182744

相关文章

  • 利用标准IO函数接口实现文件拷贝,把本地磁盘的文件A中的数据完整的拷贝到另一个文本B中
    利用标准IO函数接口实现文件拷贝,把本地磁盘的文件A中的数据完整的拷贝到另一个文本B中,如果文本B不存在则创建,要求文本A的名称和文本B的名称通过命令行传递,并进行验证是否正确。/******************************************************************** author :18312615416@1......
  • chinesecalendar:判断日期是不是工作日
    工作与学习中,有个场景需要判断指定日期是不是工作日,例如自动化办公工作日自动发邮件,量化交易判断是否为交易日等等,因此我们需要能准确判断给的日期是不是工作日,Python中一般使用模块chinesecalendar来解决这个问题。网友自己维护fromdatetimeimportdatetime#休:正常工作日......
  • SHELL编程开发Nginx一键部署实战脚本
    一、基于SHELL编程开发Nginx一键部署脚本(Make源码方式),编程思路如下从Nginx官网下载软件包nginx-1.24.0.tar.gz;通过Tar工具对其解压,tar-xzvfnginx-1.24.0.tar.gz;cd切换至nginx-1.24.0/源代码目录;预编译,./configure;编译,make;安装,makeinstall;启动Nginx服务,/usr/local/nginx......
  • Shell编程之条件语句
    目录1.条件测试2.文件测试与整数测试(1)文件测试(2)整数测试3.字符串测试与逻辑测试(1)字符串测试(2)逻辑测试4.if语句(1)if单分支语句(2)if双分支语句(3)if多分支语句5.case分支语句1.条件测试Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非......
  • 获取当前时间和日期并转换为本地时间
    文件IO练习:设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日星期xtt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。目录文件IO练习:考察点:time函数localtime函数题目解答:参考考察点:time函数**返回**1970-1-1,00:00:00以来......
  • YOLOv8 模型训练后验证
    验证代码:fromultralyticsimportYOLOpath="E:/resource/yolo8_all/ultralytics-main/"#训练后进行验证model=YOLO(path+"runs/detect/train11/weights/best.pt")metrics=model.val(data=path+"data_NEUDET.yaml")#自动评估训练的数据 参考链接......
  • shell 获取文本特定行数据
    在Shell脚本中获取文件的特定行数据,尤其是获取第N行数据,有多种方法。以下是几种常见且简便的方法:使用sed命令:如果你想获取文件的第N行,可以使用sed命令,其中N是你想获取的行号。sed-n'Np'filename例如,获取第5行:sed-n'5p'filename结合使用head和tail命令:这是一种......
  • 振弦采集仪在岩土工程监测中的精度验证与校准方法研究
    振弦采集仪在岩土工程监测中的精度验证与校准方法研究河北稳控科技振弦采集仪是一种常用的岩土工程监测仪器,用于测量地下水位、土壤压力和地表位移等参数。在使用振弦采集仪进行监测前,需要对其精度进行验证与校准,以确保测量结果准确可靠。 首先,对于振弦采集仪的精度验证,可以......
  • datetime:Python日期与时间值管理计算
    前言datetime库也用于时间日期的处理,主要用于完成日期和时间的解析,格式化和算术运算。本篇,将完整的介绍datetime库的应用知识。datetime.date与time库一样,datetime库也有获取当前日期的类,日历日期值用datetime.date表示。比如datetime.date.today()。具体代码如下:importdate......
  • 正则验证车牌号(包含新能源)
    搜索引擎得新能源车牌号编码特殊规则:1、小型新能源汽车号牌第一位必须使用字母“D”(纯电动汽车)或“F”(非纯电动汽车);2、大型新能源汽车号牌第六位必须使用字母“D”或“F”。正则表达式及校验函数如下:functionisValidCarNumber(vno:string){varpattern7=/^[京津......