Bash сравнивая значения - PullRequest
       5

Bash сравнивая значения

0 голосов
/ 18 сентября 2018

Я получаю размер файла с удаленного веб-сервера и сохраняю результаты в переменную с именем remote Я получаю это с помощью:

remote=`curl -sI $FILE | grep -i Length | awk '/Content/{print $(NF-0)}'`

Как только я скачал файл, я 'm получаю размер локальных файлов с помощью:

local=`stat --print="%s" $file`

Если я отображаю удаленные и локальные файлы, они содержат одно и то же значение.

Я пытаюсь выполнить оператор if для этого

if [ "$local" -ne "$remote" ]; then

Но это всегда показывает сообщение об ошибке, и никогда не советует, чтобы они совпадали.

Может кто-нибудь посоветовать, что я делаю не так.

Спасибо

1 Ответ

0 голосов
/ 18 сентября 2018

curl вывод использует сетевой формат для текста, означающий, что строки заканчиваются переводом каретки с последующим переводом строки;Инструменты Unix (например, оболочка) ожидают, что строки заканчиваются простым переводом строки, поэтому они рассматривают CR как часть содержимого строки и часто путаются.В этом случае происходит то, что переменная remote получает длину содержимого и CR, что недопустимо в числовом выражении, следовательно, ошибки.Есть много способов обрезать CR, но в этом случае, вероятно, проще всего сделать awk вместе с извлечением поля:

remote=$(curl -sI "$remotefile" | grep -i Length | awk '/Content/{sub("\r","",$NF); print $NF}')

Кстати, я также взял на себя смелость пометить галочки на $( ) - это легче читать, и у него нет некоторых странностей с побегами, которые есть у обратных кавычек, поэтому это предпочтительный синтаксис для захвата вывода команды.Да, и (NF-0) эквивалентно просто NF, поэтому я упростил это.Как отметил в комментарии @Jason, безопаснее использовать строчные или смешанные регистры для имен переменных и ставить двойные кавычки вокруг ссылок на них, поэтому я сделал это, изменив $FILE на "$remotefile".Вы должны сделать то же самое с локальной переменной имени файла.

Вы также можете удалить команду grep и выполнить поиск /^Content-Length:/ awk, чтобы еще больше упростить ее.

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