Синтаксическая ошибка рядом с неожиданным токеном "elif" - PullRequest
16 голосов
/ 15 ноября 2010
./chkf: line 30: syntax error near unexpected token `elif'
'/chkf: line 30: `elif [ -f "$object" ] ; then


if [ -d "$object" ] ; then
    message="$message a directory"
elif [ -f "$object" ] ; then
    message="$message a regular file."
else
    message="$message not a known file type"
fi

Также это,

./chkf: line 38: syntax error near unexpected token `else'
'/chkf: line 38: `else 

if [ -w "$object" ] ; then
    write="writeable"
else 
    write="not writeable"
fi

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

Изменить: Когда я добавляю #!/bin/bash вверху, я получаю следующую ошибку:

interpreter "/bin/bash" not found
file link resolves to "/usr/bin/bash"
-bash: ./chkf: /bin/bash^M: bad interpreter: No such file or directory

Ответы [ 5 ]

35 голосов
/ 15 ноября 2010

Это твои окончания строки.Передача из Windows оставила окончания строки CR/LF.

Когда я создаю скрипт, затем вручную добавляю символы CR, я получаю точно такую ​​же ошибку:

qq.sh: line 3: syntax error near unexpected token `elif'
'q.sh: line 3: `elif [ 1 == 1 ] ; then

Вы можете исправить это, удалив символ CR из концов строк CR / LF.

cat script.sh | sed '/\015/d' >newscript.sh
  • Символ CR соответствует \015 восьмеричному представлению, как указано в ASCII
3 голосов
/ 15 ноября 2010

похоже, у вас есть "проблема с досом", встроенная в ваш файл control-M. исправить это с помощью sed:


sed -i 's/\r//' chkf
1 голос
/ 26 сентября 2017

Два способа решить эту проблему

1) Использование Sed: -

Синтаксис

sed -i 's/\r//' filename.txt

2) Использование команды dos2unix

Синтаксис

dos2unix fileName.txt fileName.txt
0 голосов
/ 09 ноября 2011

Я получил ошибку ниже в своей почте, когда я установил cron для magento.

/bin/sh: -c: line 0: syntax error near unexpected token `newline'
/bin/sh: -c: line 0: `php /home/pooja/public_html/magento/journal/cron1.php >'

Я нашел решение для этого, я удалил пробел новой строки из моего файла cron1.php. и его работа.

( источник )

0 голосов
/ 15 ноября 2010

Теперь, когда вы добавили дополнительное сообщение об ошибке, у меня возникла мысль: ^M - это \ r, то есть конец строки Mac OS X или часть конца строки Windows - Linux использует \ n только как EOL , Если вы отредактируете в vim, вы сможете увидеть ^M, если он не прав в файле.

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