#linux #shell #awk #grep
#linux #оболочка #awk #grep
Вопрос:
У меня есть один сценарий оболочки, который принимает дату в качестве входных данных в формате ГГГГМДД. Мне нужно ввести проверку для пользовательского ввода, чтобы он принимал только дату, большую, чем через неделю после даты (например, если сегодня 20140703, тогда он должен принимать 20140710 или больше этого), и никакой строки, только 8-значное числовое значение.
Мой существующий код для чтения даты и записи даты следующей недели
echo "Please enter a date in YYYYMMDD format"
read my_date
next_week_date=$(date --date " 1 week" %Y%m%d)
Как я должен выполнить проверку.
Ответ №1:
Вы можете проверить свою дату следующим образом
# [[:digit:]] - indicate the digits only
# {NUM} - Indicate the number of occurrences
# ^ - From Starting
# $ - To Ending
if [[ $my_date =~ ^[[:digit:]]{8}$ ]] amp;amp; [[ $my_date -ge $next_week_date ]]
then
echo "valid"
else
echo "Not valid"
fi
Ответ №2:
Чтобы проверить, содержит ли ввод 8 цифр, вы можете использовать следующий код, который fail
может быть таким простым, как exit 1
:
echo $my_date | grep "^[0-9]{8}$" > /dev/null || fail()
Для проверки даты вы можете использовать это:
[ $(date -d $my_date %s) -lt $(date --date " 1 week" %s) ] amp;amp; fail()
%s
Формат преобразует дату во временную метку, которая соответствует времени unix (количество секунд с 01.01.1970).