Синтаксическая ошибка возле неожиданного токена `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. и его работы.

(источник)