Синтаксическая ошибка рядом с неожиданной знак `Элиф'

./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

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

Edit: когда я добавить #!/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 ответов


Это конец вашей линии. Передача его из 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 '/5/d' >newscript.sh
  • символ CR соответствует 5 восьмеричное представление, как указано в ASCII

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


sed -i 's/\r//' chkf

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

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

синтаксис

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

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

синтаксис

dos2unix fileName.txt fileName.txt

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


Я получил ниже ошибку в моей почте, когда я настроил 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-файл. и свою работу.

(источник)