关于shell中的变量类型:
默认bash中的变量我们是不需要关注是什么类型的,我们进行两个变量的条件测试时一般不需要关注它的类型
除了这种a='haha: 0' b=1 明显a变量中的值很复杂,有特殊符号,还有数字,那此时[]的条件测试就不满足了,就需要[[]]去测试才可以
不是这种数值很复杂的变量,则不需要特别注意变量类型
————————————————————————————————————————————————————————————————————————————————————
逻辑判断:
前面的命令执行后的状态是否为0,如果为0继续执行后面的命令:&&
[ $USER == root ] && echo $HOME
前面的命令执行后的状态是否非0,如果非0继续执行后面的命令:||
[ $USER == shy ] || echo $HOME
如果多个&&和||相结合的话,只判断前面是否成功,比如
[ $USER == "shy" ] || echo 123 && echo 456
此时123 456都会输出
在bash中,如果一个变量是纯字符串类型的,比如:
a=haha
b=haha
[ $a == $b ];echo $?
#这里就会报错,因为对于字符串比较,应使用双方括号[[ $a == $b ]]。
#双括号允许使用 == 和 != 来进行字符串的比较,而单方括号 [ ] 只支持通过特定的运算符进行数值或文件属性的比较。
————————————————————————————————————————————————————————————————————————————————————
条件测试:使用[]里面用测试符
字符串比较测试:
不管是数字还是字符都能进行测试
-z:字符串或者变量的值如果为空,则为真即$?=0
-n:字符串或者变量的值如果存在,则为真
例:
[ -z $PATH ];echo $?
[ -z $PATH ];echo $?
[ -n $PATH ];echo $?
==:字符串完全一致为真
如果是两个存储了字符串的变量进行比较的话,需要[[]]]进行比较才行,要是俩变量都是数值型的就可以用[]比较
!=:字符串不完全一致为真
例:
[ $USER == "root" ];echo $?
#被比较的应该加上"",如果没有空格的话可以不加
文档状态的测试:
-e:文档存在为真
例如:
[ -e /opt/test.sh ]
-d:文档存在,且是目录为真
-f:文档存在,且是文件为真
-r:文档存在,且有可读权限为真
-w:文档存在,且有可写权限为真
-x:文档存在,且有可执行权限为真
例:
[ -e /etc ];echo $? #测试/etc存在是否为真
比较整数大小的测试:
-gt:大于
-ge:大于等于
-eq:等于
-ne:不等于
-lt:小于
-le:小于等于
例:
[ 1 -eq $a ];echo $?