• 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. STM32 keil中编译遇到的问题

    发现 移植的SPI程序 说里面的 SPI_InitTypeDef 所有有关  SPI库函数的都找不到 这是因为 用的是  原子的程序   在 config函数中  把这个注释了

  2. Linux shell脚本全面学习(一)

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...

  3. Jquery的load加载本地文件出现跨域错误的解决方案"Access to XMLHttpRequest at 'file:///android_asset/web/graph.json' from(Day_46)

    博主是通过JS调用本地的一个json文件赋值给变量出现的跨域错误, 网上有大量文章,五花八门的,但总归,一般性此问题基本可通过这三种方法解决: https://blog.csdn.net/qq_418 ...

  4. 【无人机航空摄影测量精品教程】目录:摄影测量、Pix4d、EPS、CC、PhotoScan项目化作业流程及注意事项汇总

    目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 该专栏为目前最为热门的无人机航测内外业项目,主要内容包括:无人机航测外业作业流程(像控点布设.航线规划.仿地飞行.航拍)和内业数据 ...

  5. MYSQL导入/迁移后事件不执行

    mysql迁移后事件不执行 查看数据库是否开启事件支持 mysql> show variables like 'event_scheduler'; +-----------------+---- ...

  6. 四:net core(.NET 6)使用Filter过滤器拦截webapi方法

    Filter的基本用法 代码在最下方 使用filter过滤器,来实现拦截接口信息.咱们先新建一个项目,在原有的webapi上面,选择添加项目,添加一个类库项目: 我起个名字,就叫 Wsk.Core.F ...

  7. 基于雪花算法生成分布式ID(Java版)

    SnowFlake算法原理介绍 在分布式系统中会将一个业务的系统部署到多台服务器上,用户随机访问其中一台,而之所以引入分布式系统就是为了让整个系统能够承载更大的访问量.诸如订单号这些我们需要它是全局唯 ...

  8. nginx的请求处理

      nginx的请求处理¶ nginx使用一个多进程模型来对外提供服务,其中一个master进程,多个worker进程.master进程负责管理nginx本身和其他worker进程. 所有实际上的业务 ...

  9. nginx 重定向到系统维护页面

    上周末兄弟项目准备扩展服务器以便提供更好的服务,兄弟项目有一些功能是实时提供到我这边的,需要我这边暂时把对应系统功能屏蔽,因为使用nginx,所以可以直接配置nginx重定向到固定系统维护页面. ng ...

  10. Symbol类型的应用

    应用场景1:使用Symbol来作为对象属性名(key) 在这之前,我们通常定义或访问对象的属性时都是使用字符串,比如下面的代码: let obj = { abc: 123, "hello&q ...