При сравнении даты внутри файла с системной датой возникает ошибка: строка 7: 10#2020-12-09: значение слишком велико для базы (токен ошибки равен 09)

 #!/bin/bash
docker logs <container_name> | grep 'expiration date of' | tail -1 | cut -d ' ' -f 14 | cut -c 2-11 > /tmp/dt

dateFile=`cat /tmp/dt`

NOW=$( date +%F )

 if [ $((10#$dateFile)) -gt ${NOW} ]; then
   echo No Renewal Required
else
   echo Renewal Required
fi

Я получаю дату из файла и отправляю это значение в другой файл /tmp/dt. Затем сравниваю эту дату с системной датой для создания логики. Но получаю ошибку: строка 7: 10#2020-12-09: значение тоже отлично подходит для базы (токен ошибки 09). также я использую #10, чтобы обнулить восьмеричную ошибку.


person abhirup ghosh    schedule 21.09.2020    source источник


Ответы (1)


-gt сравнивает числа, что означает целые числа в bash. Bash интерпретирует оба операнда как арифметические выражения, а ваш анализируется как

10#2020 - 12 - 09

Итак, он начинается с 2020 в десятичном виде, вычитает 12 и пытается вычесть 09: начальный 0 говорит ему интерпретировать число в восьмеричном формате, но 9 не может появляться в восьмеричных числах, отсюда и ошибка.

Даты в формате ГГГГ-ММ-ДД можно сравнивать как строки. Использовать

[ "$dateFile" > "$NOW" ]
person choroba    schedule 21.09.2020
comment
@abhirupghosh: спасибо на StackOverflow = upvote / accept. - person choroba; 21.09.2020
comment
#!/bin/bash docker logs ‹имя контейнера› | grep 'срок действия' | хвост -1 | вырезать -d '' -f 14 | cut -c 2-11 › /tmp/dt dateFile=cat /tmp/dt NOW=$( date +%F ) if [ $NOW › $dateFile ]; затем эхо-продление не требуется, иначе эхо-продление требуется, fi просто для проверки, я обращаю логику, но все равно показывает, что не требуется продление, где моя системная дата ($now) не больше (›), чем $dateFile .. так что это должно быть «Требуется обновление» . любая идея, где ошибка. - person abhirup ghosh; 21.09.2020