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

时间:2016-08-05 11:37:11

标签: linux shell validation date

我想编写一个接受

的shell脚本
  1. 日期格式
  2. 时间格式
  3. 日期
  4. 时间
  5. 来自用户并将验证日期和时间。

    例如:

    ./test.sh mmddyyyy hhmmss 12122012 121212
    

    应该返回正确的结果。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以使用ifcase语句以及expr运算符来执行您尝试的操作,以解析和验证脚本的输入。关键是解析并将输入的datetime组件放入可由date --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没有最大的字符串处理例程选择,但它对于这种类型的工作已经足够了。