Linux 使用Shell脚本进行数据、时间验证
我想写一个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
./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并检查一下。这个太宽了。请出示一张支票并核对。