[Shell] cygwin执行if语句时出错

Shell代码如下:

if ["1"="2"]; then
    echo "a"
else
    echo "b"
fi

(1)报错:

Syntax error near unexpected token `fi'

原因:
换行符在各操作系统中是不同的:

windows:\r\n
unix:\n
mac:\r

所以,以上包含换行符的命令行,
在unix中执行,会有多余的\r字符。

处理方法一:
安装dos2unix,

$ dos2unix 1.sh

处理方法二:
把所有的\r都删掉,

$ cat < 1.sh | tr -d '\r' > 2.sh

(2)还是会报错:

[1=2]: Command not found

原因:
条件“[]”中括号内,要加空格。

处理:

["1"="2"] => [ "1"="2" ]

(3)结果错误:

条件判断没有生效,
执行了echo "a"

原因:
字符串的逻辑判断“=”两边需要加空格。

处理:

[ "1"="2" ] => [ "1" = "2" ]

注意:
字符串如果不包含空格,可以省略双引号。
如果是数字比较,不能使用“<”“>”,而应该使用“-lt”“-gt”。

点赞