Синтаксическая ошибка возле неожиданного токена `elif '
./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
Ответы
Ответ 1
Это твои линейные окончания. Передача из 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
Ответ 2
похоже, что у вас есть "проблема с dos", встроенный элемент управления-M в вашем файле. исправить его с помощью sed:
sed -i 's/\r//' chkf
Ответ 3
Два способа решить эту проблему
1) Использование Sed: -
Синтаксис
sed -i 's/\r//' filename.txt
2) Использование команды dos2unix command
Синтаксис
dos2unix fileName.txt fileName.txt
Ответ 4
Теперь, когда вы добавили дополнительное сообщение об ошибке, у меня возникла мысль: ^M
is\r, которая заканчивается Mac OS X или часть строки Windows заканчивается - Linux использует \n только как EOL, Если вы редактируете в vim
, вы должны иметь возможность видеть ^M
, если он не прав в файле.
Ответ 5
Я получил ошибку ниже в моей почте, когда я создал 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.
и его работы.
(источник)