意外的文件结束符Bash(最后一行)

3
我尝试了这里提供的几乎所有解决方案,但我的这个非常简单的代码仍然显示此错误。
x=1
echo $x
while [$x -le 5];
do
echo $x
x=$(($x+1))
done

:

-sh-4.1$ sh test1.sh
1
test1.sh: line 10: syntax error: unexpected end of file

第10行在“done”命令之后一行。我知道这与空格有关,但在我的程序中没有任何空格。


我使用了空格。我觉得它应该可以工作,但我仍然收到相同的错误。 - RAJKUMAR PADILAM
你的脚本中是否有DOS行结尾?尝试使用cat -v test1.sh命令,看看你的行末是否有丑陋的^M - gniourf_gniourf
3个回答

3

在进行整个脚本的工作时,你必须在[ ]周围添加空格,所以:

x=1
echo $x
while [ $x -le 5 ]; do
#      ^        ^
#    space    space
    echo $x
    x=$(($x+1))
done

或者使用算术:
x=1
echo $x
while ((x < 5)); do
    echo $((x++))
done

谢谢。我刚刚也做了同样的事情。我复制并粘贴了你的第一个片段,但它仍然显示相同的错误。 - RAJKUMAR PADILAM
还有什么其他方法可以尝试吗?这个错误我怎么也解决不了。 - RAJKUMAR PADILAM
你确定你正在运行bash而不是其他shell吗?echo $SHELL会告诉你。 - Gilles Quénot
是的,当我执行$SHELL命令时,它会返回/bin/sh。 - RAJKUMAR PADILAM
1
@RAJKUMARPADILAM,/bin/sh不是bash。 - Charles Duffy

0
尝试将标题放入脚本中。
#!/bin/bash

这样Linux将自动将脚本解释为Bash脚本。


我正在使用头文件。##!/bin/bash -vx - RAJKUMAR PADILAM
1
@RAJKUMARPADILAM,##!/bin/bash不是#!/bin/bash - Charles Duffy

0
我找到问题了——文件中有回车符。
我在 Windows(文本编辑器)中键入脚本,然后在 Linux 上执行它。Windows 上的编辑器使用 \r\n 来结束行;当在 Linux 上运行脚本时,\r 的存在导致出现问题。
使用 vi 作为编辑器帮助我解决了这个问题。

所以你忽略了我的评论? - gniourf_gniourf
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - RAJKUMAR PADILAM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接