@kavabangaungava
Всякое бывало.

Почему при последующих итерациях появляется ошибка?

Есть скрипт, для проверки истечение доменных имен:

while read -r domain; do
    expdate=$(whois "$domain" | grep -iE 'expir.*date|expir.*on' | head -1 | grep -oE '[^ ]+$')
    new_expdate=$(echo "$expdate" | sed 's/T.*//')
    expdate=$(date -d ${expdate} +%s)
    curdate=$(date +%s)
    day_left=$(((expdate-curdate)/86400))
    echo "For "$domain" lease expires "$new_expdate" "$day_left" day left"
done < domain.list


Если в списке один домен, то все отрабатывается без ошибки

For google.com lease expires 2028-09-14 2022 day left


Но если список увеличить, то появляются ошибки:

For google.com lease expires 2028-09-14 2022 day left
For facebook.com lease expires 2031-03-30 2949 day left
date: invalid date ‘+%s’

For  lease expires  -19418 day left
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
@dronmaxman
VoIP Administrator
For lease expires -19418 day left

Кажется в это строке не хватает домена, или у тебя пустая строка в конце списка.

grep -iE 'expir.*date|expir.*on'

Вот этот фильтр может не работать, еще может быть просто expires: или free-date:, а может и вообще этого поля не быть в whois.

Попробуй вот так
expdate=$(whois "$domain" | grep -iE 'expir.*date|expir.*on|expires|free-date' | head -1 | grep -oE '[^ ]+$')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ведь очевидно, что третий $domain - пустая строка.
while read -r domain; do
  if [ -n "${domain}" ]; then
    expdate=$(whois "${domain}" | grep -iE 'expir.*date|expir.*on|expires|free-date' | head -1 | grep -oE '[^ ]+$')
    new_expdate="-"
    day_left="-"
    if [ -n "${expdate}" ]; then
        new_expdate=$(echo "${expdate}" | sed 's/T.*//')
        expdate=$(date -d "${expdate}" "+%s")
        curdate=$(date "+%s")
        day_left=$(((expdate-curdate)/86400))
    fi
    if [ "${day_left}" -lt 0 ]; then
        echo "For '${domain}' lease already expired at '${new_expdate}'"
    else
        echo "For '${domain}' lease expires at '${new_expdate}', '${day_left}' days left"
    fi
  fi
done < domain.list
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы