shell:Linux易错点
- 判断变量是否相等,最好使用 != == ,而 -ne -eq -gt -lt -ge -le 适用于int类型比较
int和float使用-ne发生错误
int和float使用 != 没有问题
当变量不存在时的情况[ ]进行判断时,报错
替换成 != 和 == 正确
[[ ]]的情况:没有报错,但是结果完全错误
替换成 != == 结果正确
- [[ ]]与正则
[[ ]]可以使用正则,[ ]直接报语法错误 - bash中未定义变量和空变量几乎是等价的
但是我们还是有办法区别两者的
1:help set
在脚本一开始设置 set -u选项
2:
p不为空返回p
p为空返回空
p未定义,返回自定义错误信息上面的格式b为空或未定义都会返回自定义报错信息
-
${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本身的值都不会改变。
- bash为动态弱类型语言
上例中的字符串会自动被转换为int进行比较
记住一点: -eq -ne等只能用于数值比较
shell中 a 与 'a' "a"是等价的 - shell中比较字符串的ASCII码值必须使用 > <, [ ]中需要转义,[[ ]]不需要转义
- int 和 string进行比较时,string自动会被转为int进行比较