проверка даты для пользовательского формата в оболочке

Я столкнулся с подобной проблемой в Linux Redhat (Я не помню версию ). Во время загрузки я продолжал видеть сообщения о том, что ОС пытается обнаружить USB-устройство. Это явно терпело неудачу и делало несколько попыток. Мне удалось обойти эту проблему, отключив оптическую мышь во время загрузки. Как только Linux завершил загрузку, я смог снова подключить мышь и использовать ее правильно. Я не говорю, что это сработает для вас, но попробовать стоит.

0
11.05.2021, 18:17
2 ответа

Я протестировал приведенный ниже сценарий, и вы узнаете о действительной и недопустимой дате

#!/bin/bash
d="2021-03-20"
z="20-03-2021"
date +%Y-%m-%d -d "$d"
if [ $? -eq 0 ]
then
echo "its valid date"
fi
echo "========================="

date +%d-%m-%Y -d "$d"
if [ $? -eq 0 ]
then
echo "its valid date"
fi

echo "========================"

date +%Y-%m-%d -d "$z"
if [ $? -ne 0 ]
then
echo "its not a valid date"
fi




output

2021-03-20
its valid date
=========================
20-03-2021
its valid date
========================
date: invalid date ‘20-03-2021’
its not a valid date
-4
28.07.2021, 11:33

Здесь можно использовать perl. При этом используется Time ::Piece, который является основным модулем.

valid_date() {
  # this function returns with the exit status of the perl command
  perl -MTime::Piece -se 'Time::Piece->strptime($date, $fmt)' -- -fmt="$1" -date="$2" 2>/dev/null
}

Итак,

valid_date '%Y-%m-%d' '2019-11-09' && echo Y || echo N     # => Y
valid_date '%d/%m/%y' '2019-11-09' && echo Y || echo N     # => N
2
28.07.2021, 11:33

Теги

Похожие вопросы