2015-06-20 6 views
0

Я написал этот небольшой скрипт оболочки Unix для проверки формата даты. Мой скрипт должен проверить, находится ли строка в формате YYYYMMDDHHMMSS. Если он отсутствует в этом формате, он должен отправить сообщение об ошибке.Проверка формата даты Unix

Например, я объявила переменную a и присвоила ей значение.

a=20150620223405 
date "+%Y%m%d%H%M%S" -d $a > /dev/null 2>&1 
if [ $? -ne 0 ] 
then 
    echo "Invalid format" 
else 
    echo "Valid format" 
fi 

Он всегда отображается как «Недопустимый формат», я хочу знать, что здесь является ошибкой и как действовать.

+0

'date -d $ a +"% Ymd ... '? Я думаю, что если вы передали значение« NONSENSE »в качестве значения даты, то« date »вернет ошибку, но не имеет доступа к GNU дата прямо сейчас ;-(... Удачи всем. – shellter

ответ

0

От man date:

ДАТА STRING

--date = STRING представляет собой главным образом свободный формат для чтения человеком дата строка , такие как «Sun, 29 февраля 2004 16:21:42 - 0800 "или" 2004-02-29 16:21:42 "или даже" в следующий четверг ". Строка даты может содержать элементы, указывающие cal- дата окончания, время суток, часовой пояс, день недели, относительное время, rela- дата и цифры. Пустая строка указывает начало дня . Формат строки даты более сложный, чем это легко документируется , но полностью описан в информационной документации.

И о формате:

ФОРМАТ управляет выводом.

Это означает, что вы не можете подтвердить дату, которую вы передаете в качестве аргумента. date проверяет его самостоятельно, независимо от формата, который вы предоставили (поскольку человек говорит, что FORMAT управляет выходом, а не входом).

Чтобы подтвердить дату, я предлагаю вам использовать регулярное выражение и grep (1).