0
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 
4

1 回答 1

1

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

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

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

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

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

Windows 样式的行尾由回车符和换行符组成,或\r\n. 您的外壳(bash?)将 the 识别\n为行尾字符,但 the\r只是另一个字符,因此它不会将fi其视为标记,而是将if\r. 当它在错误消息中打印该标记时,\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 上吗?这就是这类问题最常出现的地方。)

于 2013-09-08T00:48:20.723 回答