本文关键词:shell 判断、grep正则表达式使用和贪婪匹配理解

1. if [ $a -le $b ], 一开始自学的时候我以为 [ ... ] 就是普通的,语法规定的结构,结果其实人家是"test"的变体,它的效果等同于使用 " test ... ",结果是将指令 ... 执行完了以后输出出来的东西作为返回值。注意,他并不是能执行所有的命令,作为“判断符号”,他要求里面的指令运行结果是 TRUE 或者 FALSE。

2. 如果xxx,就输出xxx,除了使用 if 判断语句来实现以外,还可以用 [ xxxx ] && echo xxxx && xxxxx 这样的方式来实现。原理是当一条指令执行完,只要没有报错,而且他不是一个判断式,那么它就会返回一个 TRUE ,因此想刚才那种写法就能用一个判断式子写出一连串的后续操作。不过感觉最好不要用这个方法写太长,代码会很不好看的。

3. 多条件判断有两种写法哦! [ $xxx == xxx -o/-a $yyy == yyy ]  和  [ $xxx == xxx ] ||/&& [ $yyy == yyy ] 都可以。值得注意的是,前后要留有空格才可以,并且使用 || 和 && 要在 [ ] 的外面才行。

4.[ "$xxx" == "xxx" ] 才是最稳妥的写法,不然bash会出各种奇奇怪怪的问题。

5.对于bash,它概念里的块作用域(BlockScope,JavaScript 说法)用小括号()包裹。所谓块作用域,是说在这个区域内定义的变量,离开这个区域无法被访问到,大致和Java里面的局部变量比较类似,也类似于JS里面的 “let” 关键字定义的变量。

6.grep 命令在使用的时候可以通过管道来增强其他命令的效果,比如 which bin | grep 'username' 就可以查找路径里面带有username字符串的bin文件夹的位置咯。注意,单引号不要省略,因为在写正则表达式的时候,没有单引号转义字符 \ 将工作不正常!

对于Bash,七条命令有五种不同的含义(下面的x<n>代表n个字母)。他们分别是:(1,2,7)查找“x\{0-2}”;(3)查找“x\{0-4}”;(4)查找“x\{0-4\}”;(5)查找一个0-4字母组成的字符串;(6)语法错误。

为什么上面的例子中明明是 \{0,4\} 却标红了五个字母?我的理解是adsfx中,按照正则表达式贪婪匹配(能标红最多字符的方式匹配)原则,字符串里面找到了第一个匹配表达式的字符之后,还会继续向右寻找符合要求的字符串,于是就,按照"x0"这个条件把全文所有字母标红了。实际上,他匹配到的是这样一个数组:

[ 'adsf','x','dad' ]。

下面的图就能更清楚地显示这一点!

这三个体现了贪婪匹配的原则——尽可能标出最多的字符。注意x后面那是个 1 不是 l

为什么" 52148962asdfaadsfx1dad4248 "里面没有继续匹配比如"sdfaad"这样的串呢?因为已经匹配的串asdfaa已经不能参与匹配了,剩下的dsfx只有四个字母,不符合要求了!

那么非贪婪匹配是怎么一回事?非贪婪匹配又叫做懒惰匹配,grep原生不支持这种匹配模式,需要加上 -P 使用Perl语法才能执行,只需要在量词后面加上?(直接加,不要有任何的空格)就可以!

非贪婪匹配返回的结果是尽可能短的(而不是尽可能长),一般用于".*"这种广泛匹配上,比如下面的例子,诸位好汉可以猜一猜他们的输出结果是什么,以及为什么这样输出(输出在绿色的方块下面):

练习题(?)

我自己的一些看法,不知道有无错误,希望各位看官如果有空,和我讨论一下

[2019.03.22] Linux 学习心得(1)的更多相关文章

  1. [2019.04.01]Linux 学习心得(2)-- tar 命令的理解

    这篇文章并不是发布最早的但是阅读量却每天都见长,很想知道各位大大是怎么找到这篇文章的.如果不忙,还请各位大大评论一下我看看,没准我可以为大家改进一下本文,提升一下质量. =============== ...

  2. linux学习心得之目录树开端与/etc(图文)

    linux学习心得之目录树开端与/etc(图文) linux中“一切皆文件”,学习linux一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...

  3. Linux学习心得之 Linux下命令行Android开发环境的搭建

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...

  4. Linux学习心得之 Linux下ant安装与使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下ant安装与使用 1. 前言2. ant安装3. 简单的a ...

  5. Linux学习心得之 双显卡、中文输入法及svn初步使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 双显卡.中文输入法及svn初步使用 1.前言 2.Linux双显卡解决 ...

  6. linux学习心得之vim/Cvim篇

    linux学习心得之vim/Cvim篇 在linux 下,vim 时一种最常见的编辑器,很多linux的发行版就自带了.我的是CentOS 6.3. 基本上Vim共分为3种模式,分别是一般模式,编辑模 ...

  7. Linux学习心得之 LVM管理与Linux系统安装

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 LVM管理与Linux系统安装 1.前言 2.LVM 简介与术语 3.LVM 使用 4.Li ...

  8. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  9. 2019/4/17 Linux学习

    一.Linux的文件系统 其中/prov./srv./sys 文件为文件系统,技术不过硬不要去修改:二.关于Xshell.Xft1.服务器的端口可有65535个可设置,开的越多安全性越差:2.远程登录 ...

随机推荐

  1. Docker最全教程之Ubuntu下安装Docker(十四)

    前言 Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,应用很广.本篇主要讲述Ubuntu下使用SSH远程登录并安装Docker,并且提供了Docker安装的两种方式,希望对大家有所帮 ...

  2. vue.js之动画篇

    本文引入类库的方式均采用CND的方式,可直接复制代码到编辑器中学习和测试 不使用动画切换元素 <div id="app"> <input type="b ...

  3. WinForm客户端限速下载(C#限速下载)

    最近由于工作需要,需要开发一个能把服务器上的文件批量下载下来本地保存,关键是要实现限速下载,如果全速下载会影响服务器上的带宽流量.本来我最开始的想法是在服务器端开发一个可以从源头就限速下载的Api端口 ...

  4. 杭电ACM2018--母牛的故事

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. nginx系列6:nginx的进程结构

    nginx的进程结构 如下图: 通过ps –ef | grep nginx可以看到共有三个进程,一个master进程,两个worker进程. nginx是多进程结构,多进程结构设计是为了保证nginx ...

  6. glibc溢出提权CVE-2018-1000001总结

    遇到了好几个centos6.5,一直尝试想提权.暂未成功,靶机内核:2.6.32-696.18.7.el6.x86_64. glibc版本:ldd (GNU libc) 2.12 目前编译过程中都发现 ...

  7. H5与C3权威指南笔记--transition动画

    translation:过渡 举个栗子:transition: width 1s linear; transition有三个属性,分别是transition-property, transition- ...

  8. React-Native学习手册----搭建基于ios平台的开发环境

    首先推荐几个链接: React-Native 官网地址:https://facebook.github.io/react-native/docs/getting-started React-Nativ ...

  9. Odoo的模块和应用程序的区别和使用

    一.模块(modules)和应用程序(application)的区别: 模块元件是Odoo应用程序的组成快.模块可以将新功能添加到Odoo,或改变现有功能.模块是一个包含名为__manifest__. ...

  10. Android RecyclerView 快速平滑返回顶部

    先看下实现的效果,没效果什么都白扯 下面直接上方法: //目标项是否在最后一个可见项之后 private boolean mShouldScroll; //记录目标项位置 private int mT ...