Linux:Day5 shell编程初步、grep
bash的基本特性(3)
1、提供了编程环境
程序编程风格:
过程式:以指令为中心,数据服务于指令;
对象式:以数据为中心,指令服务于数据;
shell程序:提供了编程能力,解释执行;过程式、解释执行;
过程式编程:
顺序执行;
循环执行;
选择执行;
shell脚本:文本文件
shebang:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
运行脚本:
1、给予执行权限,通过具体的文件路径指定文件执行;
2、直接运行解释器,将脚本作为解释器程序的参数运行;
变量:
命名的内存空间;
编程语言:
强类型:
弱类型:bash
把所有要存储的数据统统当作字符进行;
不支持浮点数;
逻辑运算:
与 &&:第一执行成功了,第二个也执行;第一个执行失败了,第二个就不执行;
或 ||:第一个执行成功了,第二个不执行;第一个执行失败了,第二个执行;
非
异或
示例:ls /var &> /dev/null && echo "sucess" || echo "failure"
grep:
Linux上文本处理三剑客:
grep:文本过滤(模式:pattern)工具;
grep, egrep, fgrep(fast grep)
sed:stream editor,文本编辑工具;
awk:Linux上的实现gawk,文本报告生成器;
grep:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件; 注:如果存在空白字符,必须要用引号引起来
REGEXP分为两类:
基本正则表达式:BRE
扩展正则表达式:ERE
正则表达式引擎:
grep [OPTIONS] PATTERN [FILE...]
选项:
--color=auto:对匹配到的文本着色显示:
-v:显示不能够被pattern匹配到的行;即取反;
-i:忽略字符大小写;
-o:仅显示匹配到的字符串;
-q:静默模式,不输出任何信息;
-A #:after,后#行;
-B #:before,前#行;
-C #:context,前后各#行;
基本正则表达式元字符:
.*:任意长度任意字符;
\?:匹配其前面的字符0或1次;即前面可有可无
\+:匹配其前面的字符至少1次;
\{m\}:匹配其前面字符m次;
\{m,n\}:匹配前面字符至少m次,最多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面字符至少m次;
位置锚定:
^:行首锚定;
$:行尾锚定;
^$:空行;
\< 或 \b:词首锚定;
\> 或 \b:词尾锚定;
分组:
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;
Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命令方式为:\1, \2, \3, .....
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\(ab\+\(xy\)*\)
\1:ab\+\(xy\)*
\2:xy
后向引用:引用前面的分组括号中的字符所匹配到的字符。
grep '\([[:alpha:]]\{1,3\}t\>\).*\1' /etc/passwd
练习:
1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
2、显示/etc/passwd文件中不以/bin/bash结尾的行;
3、显示/etc/passwd文件中ID号最大的用户的用户名;
4、如果用户root存在,显示其默认的shell程序;
5、找出/etc/passwd中的两位或三位数;
6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存在非空白字符的行;
7、找出"netstat -tan“命令的结果中以"LISTEN"后跟0、1或多个空白字符结尾的行;
8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
练习:
1、写一个脚本,实现如下功能
如果user1用户存在,就显示其存在,否则添加之;
2、写一个脚本,完成如下功能
如果root用户登录了当前系统,就显示root用户在线;否则说明其未登录;
Linux:Day5 shell编程初步、grep的更多相关文章
- linux之shell编程初步
#################适用于CentOS6################## #!/bin/bash ########################################## ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- Linux下Shell编程
Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户 ...
- 【Hadoop离线基础总结】linux的shell编程
linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...
- linux下shell编程示例-获取进程id
今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...
- linux中shell编程
shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...
- linux之shell编程基本语法
Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...
- Linux学习——shell编程之正则表达式和字符处理命令
shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...
随机推荐
- 1970年// iPhone “变砖”后可继续正常使用的解决方案
0.解决方案 说话先说重点,“变砖”后的iphone怎么正常使用. 拆开后盖,给电源和处理器之间断下电就OK了. 1.事件来源 对于iPhone和iPad,把时间手动设置到1970年5月以前会出现“变 ...
- 洛谷P1792 [国家集训队]种树(链表 贪心)
题意 题目链接 Sol 最直观的做法是wqs二分+dp.然而还有一种神仙贪心做法. 不难想到我们可以按权值从大到小依次贪心,把左右两边的打上标记,但这显然是错的比如\(1\ 231\ 233\ 232 ...
- springboot 事务管理
添加注解就完事儿了 @Transactional 1,Propagation 事务的传播行为 Propagation.REQUIRED 如果存在事务,就加入,没有的话就创建(默认值) 比如 A 方法 ...
- springboot 文件上传下载
关键点: 1,使用 POST 请求2,consumes=MediaType.MULTIPART_FROM_DATA_VALUE3,@RequestParm 里面的字符串和前端 input 控件的 na ...
- 23.Odoo产品分析 (三) – 人力资源板块(4) – 招聘流程(1)
查看Odoo产品分析系列--目录 安装招聘流程模块: 可以看到我们在前面的章节中设置的"生产经理"岗位,和其他的看板视图一样,每一个岗位板块提供了各种便捷的操作入口和颜色设置. ...
- Android--记录莫名其妙的引用、依赖冲突解决办法
这几天一直在忙于其他项目,打开之前的项目,我曹,代码什么都没动,为何莫名其妙的的就出现冲突了.(我猜测是依赖的其它三方库,库里面的依赖发生改变导致的) 全是这种错误,各种冲突导致的,记录一下,以下指示 ...
- ORACLE中Scalar subquery Caching的hash table大小测试浅析
前阵子总结了这篇"ORACLE当中自定义函数性优化浅析"博客,里面介绍了标量子查询缓存(scalar subquery caching),如果使用标量子查询缓存,ORACLE会 ...
- C#-多态(十二)
继承概念 多态:即一个接口,多个功能 同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果 多态性可以是静态的或动态的.在静态多态性中,函数的响应是在编译时发生的.在动态多态性中,函数的响 ...
- MySQl ifnull()和substr()
SUBSTR(str,pos,len) substr用来截取字符串: str 被截取的字符串 pos 开始位置 len 长度 举个例子: substr('abc',1,2)='ab' IFNULL(e ...
- Sqlserver分区表
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...