shell 条件语句涉及日期格式时

gijlo24d  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(70)

我必须验证用户输入的日期。可接受的日期格式为“+%m/%d/%Y”(04/10/1999)
我还必须验证第一个参数是否大于或等于第二个参数,第二个参数也是一个日期。例如:10/04/2000 10/04/1999,这将回显'第一个应大于第二个'
`

#operational statement
if [ "$1" -gt "$2" ]; then
    echo "1st should be greater than 2nd"
    exit 255
fi #having error of integer expression expected 

#validate inputted date
if [ "$1"  -ne `date -d '+%m/%d/%Y'` ] || [ "$2" -ne `date -d '+%m/%d/%Y'` ];
then
    echo "Invalid. Follow [MM/DD/YY] Format"
    exit 255
fi #i think there is a mistake with my condition but can't figure it out.
niwlg2el

niwlg2el1#

#!/bin/sh

# validation
for date do
    case $date in
        [0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]);;
        *) echo "$date: invalid, must be MM/DD/YYYY" >&2; die=1
    esac
done
[ "$die" ] && exit 1

# sort dates (new to old)
printf '%s\n' "$1" "$2" |
sort -rt / -k 3,3 -k 1,2 |
sed '1ais newer than'

或者不进行排序,而是从大到小排列单位,删除非数字,然后进行比较:

printf '%s\n' "$1" "$2" |
{ IFS=/
read m1 d1 y1
read m2 d2 y2
if [ "$y1$m1$d1" -gt "$y2$m2$d2" ]; then
    echo "$1 is newer than $2"
else
    echo "$2 is newer than $1"
fi; }

如果你能控制日期格式,你可以选择YYYYMMDD,这样就可以直接比较它们([ "$1" -gt "$2" ])。

相关问题