• 0.[[]] [] (())的对比
  • 1.[[]]支持正则表达式

0.[[]] [] (())的对比

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

 
用法
说明
脚本
支持逻辑运算符
(())

((expression))

不需要注意空格

  1. 在 (( )) 中使用变量可以加也可以不加$前缀,(( )) 会自动解析变量名
  2. 只用于进行整数运算
  3. 可以使用<、<=、>、>=等进行整数运算
  4. 表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔
  5. 对于多个表达式的情况,以最后一个表达式的值作为整个 (( )) 命令的执行结果
  6. 支持逻辑运算符,逻辑运算符为&& ||
  ((a>7 && b==c))
test/[]

test expression

或[ expression ]

注意空格

  1. Shell 内置命令
  2. >、<、== 只能用来比较字符串
  3. 比较数字需要使用 -eq、-gt 等选项;
  4. 不管是比较字符串还是数字,test 都不支持 >= 和 <=。
  5. 变量名建议用双引号""包围起来
  6. 比较字符串时需要对 >、< 进行转义
  7. 支持逻辑运算符,逻辑运算符为-o -a
  1. [ -z "$str1" ]||[ -z "$str2" ]#建议对变量名加双引号
  2. [[ $str1 \< $str2 ]] #需要对 < 进行转义

使用逻辑运算符

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

使用-o -a !选项

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

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

[[]]

[[ ]] 是 test 的升级版,对细节进行了优化,并且扩展了一些功能

[[ expression ]]

注意空格

  1. Shell 内置关键字,不是命令,在使用时没有给函数传递参数的过程,所以 test 命令的某些注意事项在 [[ ]] 中就不存在了
  2. >、<、== 只能用来比较字符串
  3. 比较数字需要使用 -eq、-gt 等选项;
  4. 不需要把变量名用双引号""包围起来,即使变量是空值,也不会出错。
  5. 不需要、也不能对 >、< 进行转义,转义后会出错
  6. 支持正则表达式!!
  7. 支持逻辑运算符,逻辑运算符为&& ||
  1. [[ -z $str1 ]] || [[ -z $str2 ]] #不需要对变量名加双引号
  2. [[ $str1 < $str2 ]] #不需要也不能对 < 进行转义

[[ ]] 剔除了 test 命令的-o-a选项,你只能使用 || 和 &&

使用逻辑运算符

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

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

使用逻辑运算符

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

1.[[]]支持正则表达式

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

[[ str =~ regex ]]    其中,str 表示字符串,regex 表示正则表达式。

功能
脚本
结果
说明
检测一个字符串是否是手机号
  1. #!/bin/bash
  2. read tel
  3. if [[ $tel =~ ^1[0-9]{10}$ ]]
  4. then
  5. echo "你输入的是手机号码"
  6. else
  7. echo "你输入的不是手机号码"
  8. fi
运行结果1:
13203451100
你输入的是手机号码

运行结果2:
132034511009
你输入的不是手机号码

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

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

正则表达式30分钟入门教程

11 shell中内置关键字[[]]:检查条件是否成立的更多相关文章

  1. js中内置有对象

    statpot:使用mongo+bootstrap+highcharts做统计报表 最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度.客户端会调用一个接口来记录接口的访问情况,我的需求 ...

  2. stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承

    一.内置方法 返回各种颜色的比重(如red(color)等) 颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮.变暗.渐变颜色等处理十分的方便. lighte ...

  3. Bean Shell常用内置变量总结

    JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info( ...

  4. JavaScript中内置对象的一些属性及方法

    Javascript对象总结 JS中内置了17个对象,常用的是Array对象.Date对象.正则表达式对象.string对象.Global对象 Array对象中常用方法: Concat():表示把几个 ...

  5. CorelDRAW中内置的视频教程在哪里?

    CorelDRAW中内置了很多教学内容和视频教程,可以帮助用户快速学习和掌握CorelDRAW的使用方法,创作出个性化的作品.很多小伙伴表示找不到软件自带学习视频,现在小编就来告诉你. 用户可以通过两 ...

  6. amazeui中内置的web组件有哪些且如何用

    amazeui中内置的web组件有哪些且如何用 一.总结 一句话总结: 1.组件还是jquery.js+amazeui.js,和插件一样,准确的说是amazeui.css+jquery.js+amaz ...

  7. Bean Shell常用内置变量

    JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info( ...

  8. 第8.9节 Python类中内置的查看直接父类的__bases__属性

    终于介绍完了__init__方法和__new__方法,接下来轻松一下,本节介绍类中内置的__bases__属性. 一. 语法释义 Python 为所有类都提供了一个 bases 属性,通过该属性可以查 ...

  9. Shell [[]]详解:检测某个条件是否成立

    [[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立. test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好:test 做不到的,[[ ]] 还能 ...

随机推荐

  1. UCOS明白解析

        UCOSII 是一个可以基于 ROM 运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS).为了提供最 ...

  2. Mybatis Plus 多租户架构实现(完美教程)

    一.背景介绍 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性. 简单讲 ...

  3. Go语言安装配置

    一.Go语言下载 官方下载地址:https://golang.google.cn/dl/ 选择自己需要的版本下载即可. 二.Go语言安装 下载完成之后,双击go1.16.4.windows-amd64 ...

  4. Ubuntu 16.04安装PyCharm

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  5. 八、.net core(.NET 6)配置读取appsettings文件内容的通用功能

     添加通用读取配置文件功能 在Wsk.Core.Package项目下,新增Microsoft.Extensions.Configuration包: 在启动项目下,设置appsettings.json属 ...

  6. libevent中数据缓冲区buffer分析

    很多时候为了应对数据IO的"慢"或者其他原因都需要使用数据缓冲区.对于数据缓冲,我们不陌生,但是对于如何实现这个缓冲区,相信很多时候大家都没有考虑过.今天就通过分析libevent ...

  7. Python+Selenium学习笔记12 - 窗口大小和滚动条

    涉及到的三个方法 set_window_size()  用于设置浏览器窗口的大小 e.gset_window_size(600,600) window.scrollTo() 用于设置浏览器窗口滚动条的 ...

  8. springboot 搭配redis缓存

    1.引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId&g ...

  9. Mobileye_EyeQ4功能和性能

    Mobileye_EyeQ4功能和性能 一.硬件平台 图丨 Mobileye EyeQ4 架构(Mobileye EyeQ4使用了多MIPS处理器) 为确保 L3 级别以上的自动驾驶汽车市场,Mobi ...

  10. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. MindSpore前端表示层(Mind ...