Linux视频学习笔记(十五)--Shell编程(一)

声明:本系列文章是博主根据 “兄弟连新版Linux视频教程”做的笔记和视频截图,只为学习和教学使用,不适用任何商业用途。

PS:文章基于Linux版本CentOS6.9,如果对Linux感兴趣,建议去看《细说Linux》,沈超老师和李明老师的教学风格我很喜欢:)

 

第十一章 Shell编程

视频11.1 基础正则表达式

 

注意:

        通配符只用来匹配文件名;

        正则表达式用来匹配文件中的内容;

 

 

 

 

 

 

 

 

 

s///是替换正则,如:

s/[0-9]/a/就是将数字替换为a,

s/^[ \t]*//表示如果匹配到以制表符开头的字符串那就把开头的制表符去掉;

g是全局匹配,匹配整个字符串中符合正则的字串,(待验证)如:

        [0-9]/g匹配全字符串中的数字,

        s/[0-9]//g将字串中所有的数字删除

 

11.2 字符截取命令

视频11.2.1 cut字段提取命令

1.cut命令

 

 

 

例子:

        如果想要批量删除/添加 etc/passwd中的用户,需要结合grep(查找所在行)和cut(查找所在列):

比如,先创建三个用户user1,user2,user3,在/etc/passwd中:

 

1.只有可登陆用户的登陆shell(权限)是/bin/bash,其他所有系统用户的登陆shell都是/sbin/nologin,所以想筛选出所有普通用户所在行及列,使用cat /bin/passwd|grep “/bin/bash”命令查找:

 

2.但是如果只想批量删除普通用户,而不删除root用户,需要对上面的结果取反grep –v str

 

3.此时再对上面的结果用cut命令确定要删除的用户名:cut –d “:” –f 1

 

4.最后,将上面的结果赋给变量,循环删除用户。

 

一般cut命令不会单独使用,需要结合其他命令共同使用

 

2.cut命令的局限

 

如果想要统计根分区的使用情况,超过80%时报警,

首先,在df –h命令的结果,查找到sda5为根分区:

 

使用命令df –h|grep sda5过滤根分区所在行:

 

然后,使用cut –f 5获取空间使用量:

发现无效,原因是中间使用空格而非tab键做分割,cut命令默认使用tab做分割符,

但使用cut –d “ “ –f 5发现:

没有结果,因为命令中的分割符为一个空格,命令会去精确匹配一个空格作为分隔符,查找第五列还是空格,

此时需要使用awk命令去查找,但是awk比较复杂,有时称awk编程。

 

视频11.2.2 printf命令

printf是格式化输出命令,格式为:

printf  “输出类型输出格式” 输出内容

(可以用‘’,也可以用“”将输出类型和输出格式引起来)

 

 

例子:

 

printf命令后不能直接跟文件名,也不能作为管道符后的命令执行:

 

但是可以用printf %s $(cat student.txt)后跟命令的结果 $(命令) 来进行打印,但是打印出的内容没有任何格式:

 

视频11.2.3 awk命令

也是按列截取,类似cut命令,但是比cut命令更加强大,可以分割使用空格作为分隔符的内容;

1.命令格式

 

例子:

 

 

输出结果:

 

df –h这条命令使用cut做截取发现无效,原因是使用空格作为分隔符,而使用awk命令可以识别:df –h|awk ‘{printf $1 “\t” $5 “\t” $6 “\n”}’

printf后的分隔符可以使用单引号也可使用双引号括起来,这里使用双引号为了不和包裹动作的单引号混淆,$n代表第n列:

 

在系统Linux命令中只有printf没有print,但是在awk命令中两者都有,使用print可以在行尾自动加入换行符:

 

接着cut里的一个问题:如何能自动获取主分区里的使用量,判断大于80%时自动报警?

判断的肯定是一个数字,对df –h 使用df –h|grep sda5|awk ‘{print $5}’|cut –d ‘%’ –f 1 做截取:

 

2.BEGIN条件

 

在执行下面的动作之前执行的动作:

3.FS内置变量

结合BEGIN使用,指定内容分隔符

 

 

例子:使用awk ‘{FS=”:”} {print $1 “\t” $3}’ /etc/passwd 命令使用“:”分隔符来打印第一列和第三列的内容:

 

发现第一行没有被分割,这是因为awk命令默认先读取一行,再执行动作,这时需要在FS动作之前先使用BEGIN设定分隔符:

 

4.END条件

END条件是在执行完所有动作后再执行END后的动作:

 

打印所有除root用户外的可登陆用户的用户名及uuid,执行完打印一句话:

cat /etc/passwd|grep “/bin/bash”|grep –v root|awk ‘BEGIN{FS=”:”} END{print “this is the last line”} {print $1 “\t” $3}’

 

5.关系运算符

awk命令也可以支持关系运算符

 

例子:

视频11.2.4 sed命令

1.sed命令介绍

sed:Linux中的流编辑器:

 

 

注:增删改查和打印都是行级动作,字串替换可以多行操作。

 

栗子:

 

2.打印

 

3.删除

 

4.插入和追加

5.替换

 

6.字符串替换

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值