• 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. SpringMVC MVC 架构模式

    MVC 架构模式 MVC(Model.View 和 Controller)是一种架构模式,它是按照职责划分的思想将系统操作分为三个模块进行处理,每个模块负责一个职责,而且模块之间可以相互交互通信,共同 ...

  2. 处理SpringMVC中遇到的乱码问题

    乱码在日常开发写代码中是非常常见的,以前乱码使用的是通过设置一个过滤器解决, 现在可以使用SpringMVC给提供的过滤器,在web.xml设置,这比我们自己写的过滤器强大的的多. 注意:每次修改了x ...

  3. python实现发送微信消息

    import json from threading import Timer from wxpy import * import requests import urllib.parse def g ...

  4. 什么是阻塞、非阻塞、同步和异步以及IO模型

    首先先看如下几个问题,或者说我们经常会遇到的问题. 阻塞是否等于同步?非阻塞是否等于异步?同步一定是阻塞的么?异步一定是非阻塞的么?要把这四个概念讲明白,先从一顿简餐说起.假设你要做一顿便饭:烧土豆: ...

  5. java接口类

    是什么:类似于java中的继承,但是继承只可以继承一个人父类,接口类可以继承多个 作用:解决java继承解决不了的问题 关键字:interface(定义) implements(使用) 注意事项:1. ...

  6. .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET平台系列2 .NET Framework 框架详解>与 <.NET平台系列7 .NET Core 体系结构 ...

  7. 源码简析Spring-Integration执行过程

    一,前言 Spring-Integration基于Spring,在应用程序中启用了轻量级消息传递,并支持通过声明式适配器与外部系统集成.这一段官网的介绍,概况了整个Integration的用途.个人感 ...

  8. SpringBoot+SpringDataJpa快速上手(基本CRUD)

    以及表结构和数据 依赖 <!-- 如果有SpringBoot启动器,就不加--> <parent> <groupId>org.springframework.boo ...

  9. flume采集MongoDB数据到Kafka中

    环境说明 centos7(运行于vbox虚拟机) flume1.9.0(自定义了flume连接mongodb的source插件) jdk1.8 kafka(2.11) zookeeper(3.57) ...

  10. 【题解】SOFTWARE 二分+搜索/dp

    题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是 ...