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
答案 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吗?这就是这类问题最常出现的地方。)