Не удается выяснить «Синтаксисную ошибку вблизи неожиданного токена». Проблема

По предложению @david-king, это решение на основе md5 для проверки целостности файлов после передачи. Выполните следующую команду один раз после cd в / source / folder на локальном компьютере и один раз после cd ing в / destination / folder на удаленном хосте: find. -тип f -print0 | xargs -0 -I {} md5sum {} | md5sum . Полученный хеш должен быть идентичным после успешной передачи.

Обновление: Согласно этот ответ на аналогичный вопрос о ServerFault , scp не гарантирует целостность файла (проверьте этот ответ @Gilles для подробностей). В качестве альтернативы проверке хэшей файлов после передачи вы можете использовать rsync для передачи файлов и проверки его кода возврата.

Обновление 2: Следующее только проверяет соответствие файлов и их соответствующих размеров после передачи: find. -тип f -print0 | xargs -0 -I {} stat --printf = "% n% s \ n" {} | сортировать | md5sum

0
19.10.2018, 00:49
2 ответа

На данный момент у вас 3 барьера:

  1. отсутствует двойная -кавычка вокруг$looptest"--должна быть"$looptest"
  2. использование >для сравнения строк в"$lname" >...--должно бытьif [ "$lname" !=...
  3. установите специальную строку -bang, чтобы сценарий анализировался с помощью оболочки, которую вы ожидаете --будь то bash, zsh, dash или простой sh.

Я воспользуюсь моментом, чтобы вызвать службу shellcheck.net; вы можете вставить свой код в поле там, и он даст вам предложения и предупреждения.

1
28.01.2020, 02:42

Подсветка синтаксиса здесь, в SE, раскрывает проблему (, как и в любом надлежащем редакторе ), но вам нужно внимательно читать раскраску и надеяться, что цвета достаточно различимы, чтобы различать их.

while [ $looptest" = y ]
do
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
  ...
done

Все, что начинается с кавычки в $looptest", показано красным, так как оно взято как строка в кавычках. Следующий "прекращает цитирование, а следующий начинает его снова, поэтому цитируемые и не цитируемые -части сценария инвертируются. Это продолжается до строки с #, которая теперь без кавычек начинает комментарий до конца строки, удаляя эффект "после нее и восстанавливая цитирование остальной части скрипта.

Оболочка продолжает синтаксический анализ и видит ключевое слово done, в то время как до этого на самом деле ожидала do, отсюда и ошибка.(doне был распознан во время цитирования, конечно.)

Без #вы получите сообщение об ошибке для круглых скобок тремя строками ниже (это специальные синтаксические токены ), а без них от -до --] указывает на ошибку при переходе к EOF при поиске закрывающей цитаты.

0
28.01.2020, 02:42

Теги

Похожие вопросы