本文关键词: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. Java数组协变与范型不变性

    变性是OOP语言不变的大坑,Java的数组协变就是其中的一口老坑.因为最近踩到了,便做一个记录.顺便也提一下范型的变性. 解释数组协变之前,先明确三个相关的概念,协变.不变和逆变. 一.协变.不变.逆 ...

  2. jmFidExt - Fiddler 代理插件

    本插件作用是把某些请求代理到指定的IP(端号)或文件,设置简便. 源码地址:https://github.com/jiamao/jmFidExt 示图 安装 下载代码,用开发工具vs2003及以上的版 ...

  3. java之servlet入门操作教程一

    这篇文章主要用来记录,进行servlet开发的一些简单操作步骤,帮助直接上手操作 准备: java环境配置:已配置(javac检验) myeclipse开发环境:已安装 tomcat服务器:已安装(或 ...

  4. [转]Uipath、BluePrism、AA产品对比之设计器篇

    本文转自:https://www.jianshu.com/p/53d0d33a1a35 版本说明: Uipath V2018.3.2,BluePrism V6.3,Automation Anywher ...

  5. jQuery(一)、核心

    我认为,学习一门语言,主要是掌握它的思想与用途,就好比谈恋爱一样,你只要猜测到了对方的想法,就能够知情达意.废话不多说,我们开始今天学习的进度,加油ヾ(◍°∇°◍)ノ゙ 1. jQuery([sele ...

  6. 微信公众号签名错误 invalid signature

    在出现了 invalid signature签名错误后按照以下步骤进行校验1.确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=j ...

  7. 从零开始搭建服务器部署web项目

    前言 该教程旨在完整描述建站过程,会将博主踩过的坑尽量详细的罗列出来.整个建站流程相对较为庞大,因此做了分解,同时适合大家有针对性的查询感兴趣的部分. 一.如何拥有自己的云服务器. 二.域名的购买与解 ...

  8. vsftpd.configro

    mmp卸载了vsftpd后 配置文件没了 安装也没有 留个做备份 嘿嘿 原始的: # Please see vsftpd.conf. for all compiled in defaults. # # ...

  9. js中innerHTML、outerHTML与innerText的用法与区别

    ____________________________________________________________________________________________________ ...

  10. 【shell基础】if分支语句

    1.if判断式if [ 条件判断一 ] && (||) [ 条件判断二 ]; thenelif [ 条件判断三 ] && (||) [ 条件判断四 ]; thenels ...