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

Str*_*rry 16 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
Run Code Online (Sandbox Code Playgroud)

这个,

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

if [ -w "$object" ] ; then
    write="writeable"
else 
    write="not writeable"
fi
Run Code Online (Sandbox Code Playgroud)

这有什么问题?这似乎是正确的.我尝试了很多变化,无法弄清楚出了什么问题.有某种看不见的角色吗?如果是这样,是否有剥离它的命令?

编辑:当我#!/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
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 35

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

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

qq.sh: line 3: syntax error near unexpected token `elif'
'q.sh: line 3: `elif [ 1 == 1 ] ; then
Run Code Online (Sandbox Code Playgroud)

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

cat script.sh | sed '/\015/d' >newscript.sh
Run Code Online (Sandbox Code Playgroud)
  • CR字符对应\015ASCII中列出的八进制表示

  • 如果您使用vim作为编辑器,则可以设置":set ff = unix"并再次写入文件. (4认同)
  • 很好的抓住.`dos2unix`是一个安装在许多系统上的便捷实用程序,可以在适当的位置删除CR. (3认同)

Sir*_*dda 5

有两种方法可以解决这个问题

1) 使用Sed :-

句法

sed -i 's/\r//' filename.txt
Run Code Online (Sandbox Code Playgroud)

2)使用dos2unix命令

句法

dos2unix fileName.txt fileName.txt
Run Code Online (Sandbox Code Playgroud)