• 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. Linux基础命令学习记录(一)

    使用频繁的Linux命令 一.文件和目录 1.cd命令 cd / 进入根目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~ 进入个人的主目录 cd - ...

  2. Kubernetes集群搭建 ver1.20.5

    目录 部署方式 1. 基础环境准备 1.1 基础初始化 1.2 安装docker 2. 部署harbor及haproxy高可用反向代理 2.1 镜像加速配置 2.2 高可用master可配置 3. 初 ...

  3. 源码篇:Flutter Provider的另一面(万字图文+插件)

    前言 阅读此文的彦祖,亦菲们,附送一枚Provider模板代码生成插件! 我为啥要写这个插件呢? 此事说来话短,我这不准备写解析Provider源码的文章,肯定要写这框架的使用样例啊,然后再哔哔源码呀 ...

  4. 【补档STM32】STM32F103俄罗斯方块游戏实现

    项目地址:https://gitee.com/daycen/stm32-tetris/tree/master 使用Keil uVision5打开即可 一.概述 ​ 本文介绍了一个基于STM32的俄罗斯 ...

  5. Python+Selenium学习笔记17 - HTML测试报告

    运行少量case时 1 # coding = utf-8 2 3 from selenium import webdriver 4 import unittest 5 import time 6 fr ...

  6. 旷视MegEngine核心技术升级

    旷视MegEngine核心技术升级 7 月 11 日,旷视研究院在 2020 WAIC · 开发者日「深度学习框架与技术生态论坛」上围绕 6 月底发布的天元深度学习框架(MegEngine)Beta ...

  7. CUDA Pro:通过向量化内存访问提高性能

    CUDA Pro:通过向量化内存访问提高性能 许多CUDA内核受带宽限制,而新硬件中触发器与带宽的比率不断提高,导致带宽受限制的内核更多.这使得采取措施减轻代码中的带宽瓶颈非常重要.本文将展示如何在C ...

  8. Redis6.x学习笔记(五)哨兵

    前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...

  9. 移动通信-5G

    1.移动通信的发展历程: "G"代表一代,每10年一个周期 1G 2G 3G 4G 5G 1980s 1990s 2000s 2010s 2020s 语音 短信 社交应用 在线.互 ...

  10. ubuntu初识

    简单的Linux系统理解 Ubuntu ctrl+alt 可以令虚拟机释放鼠标,回到主系统中. 如果ubuntu有问题,如何重装? -------直接删除目录.虚拟机内的操作不会影响到宿主机. 1.挂 ...