美文网首页OtherShell
[Shell] cygwin执行if语句时出错

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

作者: 何幻 | 来源:发表于2016-03-05 08:07 被阅读114次

    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”。

    相关文章

      网友评论

        本文标题:[Shell] cygwin执行if语句时出错

        本文链接:https://www.haomeiwen.com/subject/hjynkttx.html