今天在脚本里运行if判断的时候,总是进不了对应的分支,检查正则表达式也没有错误。单独拿到shell里面执行还是显示没有匹配。比较奇怪,就搜了下,才发现是在=~ 后面的正则表达式上不能加上引号,而且以点代表任意字符,最后面是不能加上(.)*来匹配接完的。

下面是搜到的部分信息:

一个匹配ip地址的测试,结果匹配不了:

newip='192.168.1.1'
if [[ "$newip" =~ '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ]];then
echo '找到了ip地址'
fi

翻遍了google中的中文资料,都没发现问题。最后终于用英文搜到《Advanced Bash-Scripting Guide》中的一篇介绍Bash版本的文章,其中写道:

The =~ Regular Expression match operator no longer requires quoting
of the pattern within [[ … ]].

把测试条件换成下面这样就成功了。

if [[ "$newip" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]];then
....
fi

使用变量的时候,是可以使用引号的:

newip='192.168.1.100'
reg='^([0-9]{1,3}.){3}[0-9]{1,3}$'
if [[ "$newip" =~ $reg ]];then
echo '找到了ip地址'
fi

但是,对于 $reg 这个变量,在 [[]] 操作符中,就不能加上双引号,否则也会不匹配。

shell script 在if 的判断条件正则表达式=~中引号问题的更多相关文章

  1. shell实践(一)---判断远程服务器中文件是否存在

    1.判断一个文件的常见形式为 if [ -f filename ]  #此处有-e和-f的区别 注意: 1)中括号之间的空格: 2)filename最好是绝对路径,在判断远程服务器中文件是否存在时尤为 ...

  2. if语句中的判断条件(nginx)

    if语句中的判断条件   正则表达式匹配:     ==:等值比较;     ~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写:     ~*:与指定正则表达 ...

  3. shell 脚本——判断条件

    在之前的shell语言学习笔记中已经写过shell的几种判断语句及循环语句,也简单的介绍了shell语言判断语句和判断条件.在此再做进一步学习. test命令的测试功能 test命令用于检测系统文件及 ...

  4. shell script 二 判断符号【】 shift 偏移量 if then fi

    判断符号[]类似于test.但是[]有通配符及正则表达式,为了区分,利用[]来做判断时,前后都需要加空格来区分.又一个坑 [ -z "$HOME" ];echo $? 例: 1 r ...

  5. shell脚本编程(一) 变量、条件判断、循环

    目录   1. shell脚本编程   2. 运行 Shell 脚本有两种方法   3. 变量   4. 本地变量   5. 环境变量   6. 参数变量   7. 多行注释   8. if条件判断 ...

  6. 『忘了再学』Shell流程控制 — 33、if条件判断语句(一)

    目录 1.单分支if条件语句 2.双分支if条件语句 (1)示例1 (2)示例2 什么是流程控制? 普通理解:Shell编写的程序是顺序执行的,也就是说第一命令先执行,然后接着执行第二条命令,然后再下 ...

  7. Shell脚本IF条件判断和判断条件总结

    转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结 ...

  8. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  9. shell中条件判断语法与判断条件小结

    1. IF条件判断语法: if Athen   dosthelif B   dosthelse   dosthfi 2. 判断条件:   2.1 字符串判断   str1 = str2 当两个串有相同 ...

随机推荐

  1. 摄像头模组 AWB(Auto White Balance)

    本文转载yapingmcu的<图像算法---白平衡AWB(讲的很好)>.原文http://blog.csdn.net/yapingmcu/article/details/50637797 ...

  2. sqlite 二进制字段 (zz)

    有时我们用数据库存储文件,需要用到二进制字段,下面列常用方法. 1.写二进制数据 sqlite3 * db; int result; char **errmsg =NULL; result = sql ...

  3. IP地址转换、主机大小端、htonl、ntohl实现

    copy   #include <IOSTREAM> //#include <WINSOCK.H> using std; typedef  uint16; unsigned   ...

  4. animateBackground-plugin

    (function ($) { if (!document.defaultView || !document.defaultView.getComputedStyle) { var oldCurCSS ...

  5. LeetCode Add Binary |My Solution

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

  6. 浅析php中抽象类和接口的概念以及区别[转]

    //抽象类的定义: abstract class ku{ //定义一个抽象类 abstract function kx(); ...... } function aa extends ku{ //实现 ...

  7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  8. java检索文件时加入线程

    package xianChengSaomiao; import java.io.File; import java.util.ArrayList; import java.util.List; pu ...

  9. vue2.0快速构建项目

    准备工作:已经安装了nodejs,已经安装了vue-cli $ mkdir gankbook $ cd gankbook $ vue init webpack-simple 按照需要写好信息,这将会写 ...

  10. v-for设置键值 key

    总是用 key 配合 v-for.在组件上_总是_必须用 key 配合 v-for,以便维护内部组件及其子树的状态. <ul> <li v-for="todo in tod ...