一文教你入门shell脚本9.0——Shell [[]] :检测某个条件是否成立——test 的升级版

Shell [[]]

1、定义

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

[[ ]] 的用法为:

[[ expression ]]

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

2、部分优势

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

  • 不需要把变量名用双引号""包围起来,即使变量是空值,也不会出错。
  • 不需要、也不能对 >、< 进行转义,转义后会出错。
  • 大家使用 if 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件

实例:

#!/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

3、简单实用

3.1、支持逻辑运算符

在这里插入图片描述
1、对多个表达式进行逻辑运算时,可以使用逻辑运算符将多个 test 命令连接起来,例如:

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

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

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

这两种写法都有点“别扭”,完美的写法是在一个命令中使用逻辑运算符将多个表达式连接起来。我们的这个愿望在 [[ ]] 中实现了,[[ ]] 支持 &&、|| 和 ! 三种逻辑运算符。

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

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

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

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

将多个 [[ ]] 连接起来依然是可以的

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

3.2、支持正则表达式

使用=~来检测字符串是否符合某个正则表达式

[[ str =~ regex ]]

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

#!/bin/bash

read tel

if [[ $tel =~ ^1[0-9]{10}$ ]]
then
    echo "你输入的是手机号码"
else
    echo "你输入的不是手机号码"
fi

运行结果1:

13203451100
你输入的是手机号码

运行结果2:

132034511009
你输入的不是手机号码

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

  • ^匹配字符串的开头(一个位置);
  • [0-9]{10}匹配连续的十个数字;
  • $匹配字符串的末尾(一个位置)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值