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进行比较

浙公网安备 33010602011771号