Unix错误,If-then-statement语法

时间:2013-09-07 23:55:52

标签: unix if-statement syntax

if [ $#!=2 ]
then
    echo "Please enter two text files"
fi 

这给了我:

swap.sh: line 12: syntax error near unexpected token `fi'
'wap.sh: line 12: `fi 

1 个答案:

答案 0 :(得分:1)

这里至少有两个不同的问题。

首先,该比较的正确语法需要!=运算符周围的空格:

if [ $# != 2 ]
then
    echo "Please enter two text files"
fi 

但没有这些空格,这不是语法错误,它只是不正确。 $#!=2应该简单地扩展为单个单词,例如2!=2 - 和[test命令,当给出单个单词时,只需测试该单词是否为空或不。所以你发布的代码 总是打印"Please enter two text files",即使你给它两个参数。添加空格应该可以解决这个问题。

错误消息的格式化方式(我必须编辑您的问题以使其正确显示;内联代码中的反引号在Markdown中很棘手),看起来您的脚本具有Windows样式的行结尾。如果您有像dos2unix这样的程序,可以使用它将脚本转换为Unix风格的行结尾。但仔细阅读手册页;与大多数Unix风格的文本过滤器不同,dos2unix修改其输入文件。

Windows样式的行结尾包含回车符后跟换行符,或\r\n。你的shell(bash?)将\n识别为行尾字符,但\r只是另一个字符,因此它不会将fi视为令牌,而是会看到if\r {1}}。当它在错误消息中打印该标记时,\r会使光标移动到当前行的开头,覆盖文件名。实际的错误消息如下所示:

swap.sh: line 12: syntax error near unexpected token `fi'
'wap.sh: line 12: `fi 

但实际上是这样的:

swap.sh: line 12: syntax error near unexpected token `fi'
swap.sh: line 12: `fi\r'

(你在Cygwin吗?这就是这类问题最常出现的地方。)