shell脚本[] [[]] -n -z 的含义解析

1、在中括号中,判断变量的值, 加不加双引号的问题?
    -z 判断 变量的值,是否为空; zero = 0
    - 变量的值,为空,返回0,为true
    - 变量的值,非空,返回1,为false
    -n 判断变量的值,是否为空   name = 名字
    - 变量的值,为空,返回1,为false
    - 变量的值,非空,返回0,为true
     pid="123"
     [ -z "$pid" ]  单对中括号变量必须要加双引号
     [[ -z $pid ]]   双对括号,变量不用加双引号
     [ -n "$pid" ]  单对中括号,变量必须要加双引号
     [[ -z  $pid ]]  双对中括号,变量不用加双引号
2、多个条件判断,[]  和 [[]] 的区别?
2.1 [[  ]]  双对中括号,是不能使用 -a 或者 -o的参数进行比较的;
&& 并且  || 或   -a 并且   -o 或者
[[  ]]   条件判断 &&  并且     ||  或

[[ 5 -lt 3 || 3 -gt 6 ]]    一个条件,满足,就成立  或者的关系 
[[ 5 -lt 3 || 3 -gt 6 ]]      一个条件满足,就成立  或者的关系 

[[ 5 -lt 3 ]]  ||   [[3 -gt 6 ]] 
[[ 5 -lt 3 ]]  ||   [[3 -gt 6 ]]       写在外面也可以

&&  必须两个条件同时满足,和上述一样,这里想说明的问题的是:

[[ 5 -lt 3]]  -o [[ 3 -gt 6 ]]                [[ 5 -lt 3 -o 3 -gt 6 ]]     
[[ 5 -lt 3 -a  3 -gt 6 ]]       [[ 5 -lt 3 -a 3 -gt 6 ]]     
-a 和 -o就不成立了,是因为,[[]]  双对中括号,不能使用 -o和 -a的参数
直接报错:
[hadoop@hadoop002 script]$ [[ 5 -lt 3 -a  3 -gt 6 ]]  
-bash: syntax error in conditional expression
-bash: syntax error near `-a'
2.2  [ ]  可以使用 -a   -o的参数,但是必须在 [ ] 中括号内,判断条件,例如:
[ 5 -lt 3  -o  3 -gt 2 ]     或者条件成立
[5 -lt 3 ] -o [ 3 -gt 2]    或者条件, 这个不成立,因为必须在中括号内判断

如果想在中括号外判断两个条件,必须用&& 和 || 比较
[5 -lt 3 ] ||  [ 3 -gt 2]  
[5 -gt 3 ] &&  [ 3 -gt 2]    成立

相对的,|| 和 && 不能在中括号内使用,只能在中括号外使用
3、当判断某个变量的值是否满足正则表达式的时候,必须使用[[  ]]  双对中括号

单对中括号,直接报错:
[hadoop@hadoop002 script]$ tel=13888888888
[hadoop@hadoop002 script]$ [[ $tel =~ [0-9]{11} ]]
[hadoop@hadoop002 script]$ echo $?
0
[hadoop@hadoop002 script]$ [ $tel =~ [0-9]{11} ]
-bash: [: =~: binary operator expected
[hadoop@hadoop002 script]$ 
=~ 念做 “does match" ,表示左边的字符串是否匹配右边的正则表达式。
!~ 念做 "doesn't match"表示左边的字符串是否不能匹配右边的正则表达式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值