意外令牌`elif'附近的语法错误

时间:2010-11-15 07:03:17

标签: bash shell

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

6 个答案:

答案 0 :(得分:34)

这是你的行结尾。从Windows传输它会使CR/LF行结束。

当我创建脚本然后手动添加CR个字符时,我得到完全相同的错误:

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

您可以通过从CR / LF行结尾中删除CR字符来修复它。

cat script.sh | sed '/\015/d' >newscript.sh
  • CR字符对应于ASCII
  • 中列出的\015八进制表示

答案 1 :(得分:3)

看起来你有“dos问题”,嵌入式控件-M在你的文件中。用sed修复它:


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

答案 2 :(得分:1)

解决此问题的两种方法

1)使用Sed: -

语法

dos2unix fileName.txt fileName.txt

2)使用dos2unix命令

语法

git cherry-pick

答案 3 :(得分:0)

既然您已经添加了其他错误消息,我有一个想法:^M是\ r \ n,这是Mac OS X行结尾或Windows行结尾的一部分 - Linux仅使用\ n作为EOL。如果您在vim进行修改,则应该能够看到^M,如果它不正确,请通过该文件。

答案 4 :(得分:0)

接受的答案不正确。它已经 sed '/\015/d' ... 这将删除具有 \r 字符的每一行。

接下来的两个答案正确显示: sed -i 's/\r//' filename.txt

答案 5 :(得分:-1)

当我为magento设置cron时,我的邮件中出现以下错误。

/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文件中删除换行符空间。 和它的工作。

source