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
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
您在这里至少有两个不同的问题。
首先,该比较的正确语法需要!=
运算符周围的空格:
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 上吗?这就是这类问题最常出现的地方。)