本文关键词: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. CSS3制作上下跳动动画箭头效果

    动画效果如下: 代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...

  2. WEB前端需要了解的XML相关基础知识

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

  3. Android com.daimajia.slider.library.SliderLayout 去掉底部半透明标题背景

    com.daimajia.slider.library.SliderLayout 是挺好用的轮播图控件,但是底部灰色背景有时候用不到,所以得去掉. sliderLayout.setCustomAnim ...

  4. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  5. 问题解决--无法解析的外部符号 _imp_XXXXXXXXX

    错误示例: 出现字符_imp,说明不是真正的静态库,而是某个动态库的导入库,导入函数和自己不同名,所以加了字符_imp.比如说_imp_GetUserNameA就是GetUserNameA函数. 会报 ...

  6. Maven deploy部署jar包到远程私仓

    Maven deploy部署jar包到远程私仓 maven deploy介绍 maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的 ...

  7. block的注意点

    1). 在block内部使用外部指针且会造成循环引用情况下,需要用__week修饰外部指针: __weak typeof(self) weakSelf = self; 2). 在block内部如果调用 ...

  8. CTF杂项之音频隐写

    题目来自bugku 二话不说,直接上图 由题目可以看出,这题需要用到一个KEY,加上又是一段音频,很容易联想到一个著名的音频隐写解密软件Mp3stego 直接上工具 ok,成功Get Flag

  9. 我的第一个python web开发框架(39)——后台接口权限访问控制处理

    前面的菜单.部门.职位与管理员管理功能完成后,接下来要处理的是将它们关联起来,根据职位管理中选定的权限控制菜单显示以及页面数据的访问和操作. 那么要怎么改造呢?我们可以通过用户的操作步骤来一步步进行处 ...

  10. 我的第一个python web开发框架(37)——职位管理功能

    对于职位管理,我们可以理解它为角色权限的管理,就像前面所说的一样,有了职位管理,后台管理系统绑定好对应的权限以后,新进员工.离职或岗位调整,管理员操作起来就非常的便捷了,只需要重新绑定对应职位就可以做 ...