Linux 使用Shell脚本进行数据、时间验证

Linux 使用Shell脚本进行数据、时间验证,linux,shell,validation,date,Linux,Shell,Validation,Date,我想写一个shell脚本,它将接受 日期格式 时间格式 日期 时间 并将验证日期和时间 例如: ./test.sh mmddyyyy hhmmss 12122012 121212 应返回正确的结果。如果您得到0,则使用此选项。您的日期有效 date "+%d/%m/%Y" -d "03/10/2016" > /dev/null 2>&1 is_valid=$? 如果您的日期为有效日期,请使用此选项 date "+%d/%m/%Y" -d "03/10/2016" &g

我想写一个shell脚本,它将接受

  • 日期格式
  • 时间格式
  • 日期
  • 时间
  • 并将验证日期和时间

    例如:

    ./test.sh mmddyyyy hhmmss 12122012 121212
    

    应返回正确的结果。

    如果您得到0,则使用此选项。您的日期有效

    date "+%d/%m/%Y" -d "03/10/2016" > /dev/null  2>&1
     is_valid=$?
    

    如果您的日期为有效日期,请使用此选项

    date "+%d/%m/%Y" -d "03/10/2016" > /dev/null  2>&1
     is_valid=$?
    

    您可以使用
    if
    case
    语句以及
    expr
    运算符来解析和验证脚本的输入,从而完成您正在尝试的操作。关键是解析输入的
    日期
    时间
    组件,并将其转换为可由
    日期--date=”“
    解释的格式。你可以采取很多方法。下面是使用示例输入的一个简单示例:

    #!/bin/sh
    
    [ "$#" -lt "4" ] && {
        printf "error: insufficient input.\n"
        printf "usage: %s datestr timestr date time\n" "${0//*\//}"
        printf "   eg: %s mmddyyyy hhmmss 01012011 122515\n" "${0//*\//}"
        exit 1
    }
    
    datestr=
    timestr=
    
    case "$1" in
        "mmddyyyy" )
            [ $(expr length "$3") -ne "8" ] && {
                printf "error: invalid date for format.\n"
                printf " '%s' != '%s'\n" "$1" "$3"
                exit 1
            }
            datestr="$(expr substr "$3" 1 2)"
            datestr="$datestr/$(expr substr "$3" 3 2)"
            datestr="$datestr/$(expr substr "$3" 5 4)"
            ;;
        * )    printf "error: invalid date format '%s'\n" "$1"
            ;;
    esac
    
    case "$2" in
        "hhmmss" )
            [ $(expr length "$4") -ne "6" ] && {
                printf "error: invalid time for format.\n"
                printf " '%s' != '%s'\n" "$2" "$4"
                exit 1
            }
            timestr="$(expr substr "$4" 1 2)"
            timestr="$timestr:$(expr substr "$4" 3 2)"
            timestr="$timestr:$(expr substr "$4" 5 2)"
            ;;
        * )    printf "error: invalid time format '%s'\n" "$2"
            ;;
    esac
    
    printf "%s\n" "$(date -d "$datestr $timestr")"
    
    exit 0
    
    示例使用/输出

    $ sh datetmstr.sh mmddyyyy hhmmss 12122012 121212
    Wed Dec 12 12:12:12 CST 2012
    

    您可以在此方法的基础上添加其他日期/时间输入格式。POSIX shell没有最多的字符串处理例程可供选择,但对于这种类型的工作来说,它已经足够了。

    您可以使用
    if
    case
    语句以及
    expr
    运算符来解析和验证脚本的输入,从而完成您正在尝试的任务。关键是解析输入的
    日期
    时间
    组件,并将其转换为可由
    日期--date=”“
    解释的格式。你可以采取很多方法。下面是使用示例输入的一个简单示例:

    #!/bin/sh
    
    [ "$#" -lt "4" ] && {
        printf "error: insufficient input.\n"
        printf "usage: %s datestr timestr date time\n" "${0//*\//}"
        printf "   eg: %s mmddyyyy hhmmss 01012011 122515\n" "${0//*\//}"
        exit 1
    }
    
    datestr=
    timestr=
    
    case "$1" in
        "mmddyyyy" )
            [ $(expr length "$3") -ne "8" ] && {
                printf "error: invalid date for format.\n"
                printf " '%s' != '%s'\n" "$1" "$3"
                exit 1
            }
            datestr="$(expr substr "$3" 1 2)"
            datestr="$datestr/$(expr substr "$3" 3 2)"
            datestr="$datestr/$(expr substr "$3" 5 4)"
            ;;
        * )    printf "error: invalid date format '%s'\n" "$1"
            ;;
    esac
    
    case "$2" in
        "hhmmss" )
            [ $(expr length "$4") -ne "6" ] && {
                printf "error: invalid time for format.\n"
                printf " '%s' != '%s'\n" "$2" "$4"
                exit 1
            }
            timestr="$(expr substr "$4" 1 2)"
            timestr="$timestr:$(expr substr "$4" 3 2)"
            timestr="$timestr:$(expr substr "$4" 5 2)"
            ;;
        * )    printf "error: invalid time format '%s'\n" "$2"
            ;;
    esac
    
    printf "%s\n" "$(date -d "$datestr $timestr")"
    
    exit 0
    
    示例使用/输出

    $ sh datetmstr.sh mmddyyyy hhmmss 12122012 121212
    Wed Dec 12 12:12:12 CST 2012
    

    您可以在此方法的基础上添加其他日期/时间输入格式。POSIX shell没有最多的字符串处理例程可供选择,但对于这种类型的工作来说,它已经足够了。

    这太广泛了。请出示a并检查一下。这个太宽了。请出示一张支票并核对。