Синтаксическая ошибка рядом с неожиданным маркером newline

Я пытаюсь написать сценарий, который удаляет все .jpg с этим нечетным числом. Это мой код:

Когда я запускаю его он выводит запуска, а затем говорит: «ошибка синтаксиса около Неожиданные маркера приводит к„фи“»

Когда я был тогда на линии после того, как если он сказал «ошибка синтаксиса рядом с неожиданным токеном ‘then’ ‘

Как это исправить?

Создан 14 дек. 13 2013-12-14 18:33:50 Calvin Koder

4 ответа

А также иметь then на новой линии, также необходимо пространство до и после [ , который является специальным символом в BASH.

Создан 14 дек. 13 2013-12-14 18:43:07 jprice

Его все еще дает мне «синтаксическую ошибку около неожиданного токена», а затем » – Calvin Koder 14 дек. 13 2013-12-14 18:54:37

Код, который я опубликовал, запускается без ошибок в моих собственных системах.Я могу только воссоздать ошибку, которую вы цитируете, удалив пробел между символами ‘if’ и’ [‘. Убедитесь, что все пробелы, которые я описал, находятся на своем месте. – jprice 14 дек. 13 2013-12-14 18:59:34

Вы забыли процитировать » "$ f" » – Aleks-Daniel Jakimenko-A. 14 дек. 13 2013-12-14 19:15:37

Я только фокусировался на рассматриваемой синтаксической ошибке, но справедлив, я редактировал код для включения этих цитат. – jprice 14 дек. 13 2013-12-14 19:19:01

Это не должно стать проблемой, поскольку в именах файлов должно быть число + .jpg, но правильное цитирование настоятельно рекомендуется в любом случае. Тем не менее мне не нравится ваше выражение if, там нет смысла использовать тестовую команду. Таким образом, я даю этот ответ -1 или ничего вообще . – Aleks-Daniel Jakimenko-A. 14 дек. 13 2013-12-14 19:37:17

Вы также можете предшествовать ‘then’ точкой с запятой. – Keith Thompson 14 дек. 13 2013-12-14 23:56:03

Эта конкретная ошибка связана с тем, что «тогда» не находится на новой строке. Также стоит отметить, что ставим semicollon (; после – Kit10 11 авг. 16 2016-08-11 18:11:25

«Тогда» — это команда в bash, поэтому ей нужно «;» или новой строки перед ним.

Читайте также  Робот пылесос филипс инструкция

Создан 14 дек. 13 2013-12-14 18:35:55 peterh

Как я уже говорил, когда я был на линии после того, как он сказал «синтаксическая ошибка около неожиданного токена», то « – Calvin Koder 14 дек. 13 2013-12-14 18:41:05

У этого была другая причина, этот сценарий этого не делает. Но есть еще одна проблема: $ ((. )) пытается выполнить «fname% 2», и это не то, что вы хотите. Я тоже исправил эту проблему. – peterh 14 дек. 13 2013-12-14 18:46:24

Все еще есть много ошибок. – Aleks-Daniel Jakimenko-A. 14 дек. 13 2013-12-14 19:16:26

Немногие, только 2. 🙂 – peterh 14 дек. 13 2013-12-14 19:19:16

Первая проблема с вашим сценарием является то, что вы должны поставить пробел после [ .
Тип type [ чтобы увидеть, что на самом деле происходит. Он должен сказать вам, что [ является псевдонимом команды test , поэтому [ ] в bash не является специальным синтаксисом для условных выражений, это просто команда сама по себе. То, что вы должны предпочесть в bash, — [[ ]] . Эта общая ошибка сильно объясняется here и here.

Другая проблема заключается в том, что вы не указали "$f" , что может стать проблемой позже. Это объясняется here

Вы можете использовать арифметические выражения в if , так что вам не придется использовать [ ] или [[ ]] вообще в некоторых случаях. Больше информации here

Также не нужно использовать
в каждом echo , потому что echo помещает новые строки по умолчанию. Если вы хотите показать две строки новой строки, используйте echo -e ‘start
‘ или echo $’start
‘ . Этот $» синтаксис объясняется here

Чтобы сделать его полностью совершенный, вы должны поместить — перед тем произвольные имена файлов, в противном случае rm может рассматривать его в качестве параметра, если имя файла начинается с тиром. Это объясняется here.

To reset the admin password of SolusVM I am executing the following command:

When doing so, the following error message is printed:

Читайте также  Программа жди меня на нтв

What is the reason for this problem? I am running the command as root.

1 Answer 1

The characters ‘ ‘, are to indicate a place-holder, you should remove them to read:

Любая идея о том, что может быть проблемой?

Сохранено как .sh и запущено bash file.sh

CentOS 6 32-разрядный

В чем проблема? В первый раз, когда используется BASH, нужно что-то для простого бесконечного цикла на что-то.

Запустите cat -v file.sh .

Скорее всего, у вас есть возврат каретки или свободное место в вашем файле. cat -v покажет их как ^M и M-BM- или M- соответственно. Он также будет показывать любые другие странные символы, которые вы, возможно, попали в ваш файл.

Удалите разрывы строк Windows с помощью

Я получал ту же ошибку на Cygwin; Я сделал следующее (один из них исправил его):

  • Преобразован TABS в SPACES
  • выполнил dos2unix в файле .(ba)sh

Какая ошибка вы получаете?

Если вы получите эту ошибку, у вас могут быть неудачные окончания строк. Unix использует в конце файла, а Windows использует . Этот символ интерпретируется как символ.

Вы можете использовать od -a test.sh для просмотра невидимых символов в файле.

sp обозначает пробел, ht обозначает вкладку, cr обозначает , а nl обозначает . Обратите внимание, что все строки заканчиваются на cr , за которым следует символ nl .

Вы также можете использовать cat -v test.sh , если ваша команда cat принимает параметр -v .

Если у вас есть dos2unix на вашем поле, вы можете использовать эту команду для исправления вашего файла:

Открыть новый файл с именем foobar

Вход script

Выход и сохранение

CTRL + X , затем Y и Enter

Установить script исполняемый файл и запустить

Может помочь кому-то еще: у меня возникли такие же проблемы, когда я сделал некоторую "копию-вставку" из документа Microsoft Word, где я сделал заметки, в свою оболочку script (s).

Повторная запись вручную, тот же самый код в script просто решил это.

Читайте также  Прокладка с кровью фото

Сначала это было совершенно непонятно, я думаю, что скрытые символы Word и/или форматирование были проблемой. Очевидный, но не видимый. Я потерял около часа на этом (я не эксперт в оболочке, как вы могли догадаться. )

Иногда эта ошибка возникает из-за непредвиденных символов CR в файле, обычно потому, что файл был сгенерирован в системе Windows, которая использует окончания строки CR. Вы можете исправить это, запустив os2unix или tr , например:

Это удаляет из файла любые символы CR.

Отредактируйте свой код в любой среде Linux, тогда вы не столкнетесь с этой проблемой. Если редактировать в окнах блокнот в любом пространстве возьмет его как ^ М.

У меня точно такая же проблема, как и выше, и я провел целый день, чтобы понять, что мне не нравится мой подход к новой линии. Вместо этого я использовал один и тот же код с подходом с двоеточием. Например, мой исходный код с использованием новой строки (которая забросила ту же ошибку, что и ваша):

И используя код с точкой с запятой с работающим чудом:

Я замечаю, что такая же проблема возникает и для других команд, используя подход новой строки, поэтому я думаю, что буду придерживаться точки с запятой для моего будущего кода.

Там вы можете получить эту проблему, не имея смешанных проблем с новой строкой (по крайней мере, в моей оболочке, которая является GNU bash v4.3.30):

Это связано с тем, что bash расширяет обратные выходы внутри строк с двойными кавычками (см. руководство bash на quoting и подстановка команд), и перед поиском соответствующего обратного хода будут интерпретировать любые дополнительные двойные кавычки как часть подстановки команды:

Вы можете обойти это, избегая обратных шагов в вашей строке с помощью обратного слэша или используя строку с одним кавычком.

Я не уверен, почему это дает только одно сообщение об ошибке, но я думаю, что это связано с определением функции:

Ссылка на основную публикацию
Adblock
detector