Проверьте дату и время, введенные пользователем в UNIX - PullRequest
4 голосов
/ 06 января 2011

У меня есть сценарий оболочки, который использует параметры даты и времени, введенные пользователем.Дата как мм / дд / гггг и время как ЧЧ: ММ.Что было бы самым простым способом проверить правильность введенной пользователем даты [например, месяц должен быть меньше 12 .... для времени ММ должен быть меньше 60 ... Есть ли в UNIX какие-либо встроенные функции для проверкиотметка времени?

Ответы [ 3 ]

2 голосов
/ 06 января 2011

Вы можете использовать инструмент unix date для анализа и проверки его для вас, а также для проверки кода возврата, например,

Действительная дата, код возврата 0:

joel@bohr:~$ date -d "12/12/2000 13:00"
Tue Dec 12 13:00:00 GMT 2000
joel@bohr:~$ echo $?
0

Недопустимая дата, код возврата 1:

joel@bohr:~$ date -d "13/12/2000 13:00"
date: invalid date `13/12/2000 13:00'
joel@bohr:~$ echo $?
1

Вы можете изменить формат ввода, принятый date , используя параметр + FORMAT ( man date )

Собираем все вместе, как маленький скрипт:

usrdate=$1
date -d "$usrdate"  > /dev/null 2>&1
if [ $? -eq 0 ]; then
        echo "Date $usrdate was valid"
else
        echo "Date $usrdate was invalid"
fi
0 голосов
/ 11 февраля 2014

(поздний ответ)

То, что вы можете использовать:

...
DATETIME=$1

#validate datetime..
tmp=`date -d "$DATETIME" 2>&1` ; #return is: "date: invalid date `something'"
if [ "${tmp:6:7}" == "invalid" ]; then
    echo "Invalid datetime: $DATETIME" ;
else
    ... valid datetime, do something with it ...
fi
0 голосов
/ 06 января 2011

Вы можете использовать grep, чтобы проверить, что вход соответствует правильному формату:

if ! echo "$INPUT" | grep -q 'PATTERN'; then
   # handle input error
fi

, где PATTERN - это регулярное выражение, которое соответствует всем действительным входам и только действительным входам,Я оставляю вам конструировать этот шаблон; -).

...