shell:Linux易错点

 

  1. 判断变量是否相等,最好使用        !=   ==  ,而 -ne -eq -gt -lt -ge -le 适用于int类型比较

     

     int和float使用-ne发生错误

     

     int和float使用 != 没有问题


    当变量不存在时的情况

     

     [ ]进行判断时,报错

     

     替换成 != 和 == 正确

    [[ ]]的情况:

     

     没有报错,但是结果完全错误

     

     替换成 != == 结果正确

  2. [[ ]]与正则
    [[ ]]可以使用正则,[ ]直接报语法错误

     

     

  3. bash中未定义变量和空变量几乎是等价的

     

     但是我们还是有办法区别两者的
    1:

    help set

     

     在脚本一开始设置 set -u选项

     

     2:

     

     p不为空返回p

    p为空返回空
    p未定义,返回自定义错误信息

     

     上面的格式b为空或未定义都会返回自定义报错信息

  4. ${var:=value}
    
    上述语法表示如果var为空,则返回value,并将value赋值给var,如果var不为空,则返回var本身的值,var不为空时,var值不会被改变,var为空时,var的值会被设置成指定值。
    
    ${var:-value}
    
    上述语法表示如果var为空,则返回value,如果var不为空,则返回var的值,无论var是否为空,var本身的值不会改变。
    
    ${var:+value}
    
    上述语法表示如果var不为空,则返回value,如果var为空,则返回空值,无论var是否为空,var本身的值不会改变。
    
    ${var:?error_info}
    
    上述语法表示如果var为空,那么在当前终端打印error_info,如果var的值不为空,则返回var的值,无论var是否为空,var本身的值都不会改变。

     

  5. bash为动态弱类型语言

     

     上例中的字符串会自动被转换为int进行比较

    记住一点: -eq -ne等只能用于数值比较
    shell中 a 与 'a' "a"是等价的

     

     

  6. shell中比较字符串的ASCII码值必须使用 > <, [ ]中需要转义,[[ ]]不需要转义


     

     

  7. int 和 string进行比较时,string自动会被转为int进行比较

     

     

posted @ 2020-09-22 17:33  ascertain  阅读(186)  评论(0编辑  收藏  举报