Сравнение двух строк даты в bash - PullRequest
2 голосов
/ 08 декабря 2011

У меня проблемы со скриптом, который проверяет дату таблицы, чтобы убедиться, что данные подчиненного устройства обновлены

Проблема в том, что равенство даты возвращается неверно:

NOW=$(date +"%Y-%m-%d")
VALUE=`mysql -uroot -p database -e "select DATE_FORMAT(create_date,'%Y-%m-%d') as '' from actions order by id desc limit 1"`
echo $NOW $VALUE
if [ "$?" -ne 0 ]; then
   MSG="MySQL check data date failed"
   echo $MSG
   echo $MSG > $MESSAGE
   /bin/mail -s "$SUBJECT" "$EMAIL" < $MESSAGE
   exit 7
fi
if [ "$NOW" != "$VALUE" ]; then
   echo "not equal"
fi

Вывод, что они не равны:

2011-12-08 2011-12-08
не равно

Я предполагаю, что я сравниваю два разных типа, но в соответствии с документацией bash, этого не должно быть. Может кто-то объяснить это мне? Спасибо

1 Ответ

3 голосов
/ 09 декабря 2011

Если вы включите отладку оболочки set -vx, вы увидите каждую строку (или блок кода, такой как while, для циклов), отображенный (подробный режим), тогда вы получите строку, как она выполняется со всеми переменнымирасширен до их текущих значений.Измените последнее условие на

if [ "X${NOW}X" != "X${VALUE}X" ] ; then ....

И вы легко сможете определить, есть ли в $NOW или $VALUE дополнительные символы пробела.Как только вы увидите, где находятся различия, вы сможете легко определить, как исправить присвоение этих значений.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...