shell [[]]

作用:检测某个条件是否成立

[[]]是shell内置关键字,他和test命令类似,也用来检测某个条件是否成立。

test能做到的[[]]也能做到,而且做得更好,test做不到的,[[]]还能做到。

可认为[[]]是test的升级版对细节进行了优化并扩展了一些功能。

用法:[[ expression ]]

当[[]]判断expression成立时,退出状态为0,否则非0值。注意[[]]和expression之间的空格,这两个空格是必须的,否则会导致语法错误。

[[]]不需要注意某些细枝末节

[[]]是内置关键字,不是命令,在使用时没有给出函数传递参数的过程,所以test命令的某些注意事项再[[]]中就不存在了。具体包括:

 ·不需要把变量名用双引号“”包裹起来,即使变量是空值,也不会出错。

 ·不需要、也不能对><进行转义,转义后会出错

#! /bin/bash

 read str1

 read str2

 if [[ -z $str1 ]] || [[ -z $str2 ]]   ------------>不需要对变量名加双引号

 then

           echo "字符串 不能为空"

 elif [[$str1 < $str2 ]]    ------------------>不需要也不能对 < 进行转义

 then

         echo "str1 < str2"

 else

         echo "str1>=str2"

 fi

运行结果:

Shell脚本:Linux Shell脚本学习指南(超详细)

数据结构与算法教程(非常详细)

str1 < str2

[[]]支持逻辑运算符

对多个表达式进行逻辑运算时,可以使用逻辑运算符将多个test命令连接起来,例如:

[ -z "$str1"] || [ -z "str2"]

也可以借助选项把多个表达式写在一个test命令中,如:

[ -z "$str1" -o -z "$str2"]

但是这种写法有些别扭,完美写法是在一个命令中使用逻辑运算符将多个表达式连接起来。可以在[[]]中实现,[[]]支持&&、 ||和!三种逻辑运算符。

使用[[]]对上面语句进行修改:

[[ -z $str1 || -z $str2 ]]

注意:[[]]剔除了test命令的 -o-a选项,你只能使用                                      ||&&这意味着,你不能写成下面的形式:

[[ -z $str1 -o -z $str2]]

 当然,使用逻辑运算符将多个[[]]连接起来依然是可以的,因为这是shell本身提供的功能,跟[[]]或者test没有关系,如下图所示:

[[ -z $str1 ]] || [[ -z $str2 ]]

[[]]支持正则表达式

在shell中,,可以使用=~来检测字符串是否符合某个正则表达式,它的用法为:

[[ str =~ regex]]

str代表字符串,regex表示正则表达式。

下面的代码检测一个字符串是否是手机号:

#! /bin/bash

 read tel

 if [[$tel =~^1[0-9]{10}$ ]]

 then

      echo "你输入的是手机号码"

 else

      echo "你输入的不是手机号码"

 fi

运行结果1:

13203451100

你输入的不是手机号码

对^[0-9]{10}$的说明:

·^匹配字符串开头(一个位置)

·[0-9]{10}匹配连续的十个数字

·$匹配字符串的末尾(一个位置)

总结:

[[ ]] 完全可以替代test 或者 [ ],而且更加方便,更加强大。

但是 [[ ]] 对数字的比较仍然不友好,所以我建议,以后大家使用 if 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值