linux 第六章 shell编程及自动化运维–三剑客

一、正则表达式

1、前言

名词解释:

正则表达式是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于2个正斜杠之间:例如/I[oO]ve/就是正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。

正则能被哪些工具用到: vim、sed、awk、grep

适用场景: mysql、oracle、PHP、python、Apache、Nginx…需要正则

2、元字符

定义: 原字符是这样一类字符。他们代表的是不同于字面本身的含义。

分类:

基本正则表达式元字符:

^:行首定位符

搜索以root开头的。

[root@localhost] grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost] grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

$:行尾定位符。

给我搜一下Love结尾的,作为行的末端的文字

[root@localhost] grep love 1.txt
i love you
love you
love
[root@localhost] grep love$ 1.txt
love

. :匹配任意单个字符。

[root@localhost] grep abc 1.txt
abc
[root@localhost] grep adc 1.txt
adc
[root@localhost] grep a.c 1.txt
abc
adc

*:匹配前导符0到多次。

[root@localhost] cat 1.txt
lve
love
loove
loooove
loobbe
lo333ve
[root@localhost] grep lo*ve 1.txt   #匹配0到多个o最后以ve结尾
lve
love
loove
loooove
[root@localhost] cat 1.txt
a
ab
abc
abcd
abcde
abcdef
[root@localhost] grep abc 1.txt
abc
abcd
abcde
abcdef
[root@localhost] grep abc* 1.txt
ab
abc
abcd
abcde
abcdef

.*:任意多个字符

[root@localhost] cat 1.txt
lve
love
loove
loooove
loobbe
lo333ve
[root@localhost] grep lo3.* 1.txt
lo333ve
[root@localhost] grep lo.*be 1.txt
loobbe

[ ]:匹配指定范围内的一个字符

[root@localhost] cat 1.txt
love
Love
1ove
iove
[root@localhost] grep [lL]ove  1.txt
love
Love

[-]:匹配指定范围内的一个字符,连续的范围

[root@localhost] cat 1.txt
love
Love
1ove
iove
[root@localhost] grep [0-9] 1.txt
1ove
[root@localhost] grep [a-z]ove 1.txt
love
iove

[^]:匹配不在指定组内的字符

[root@localhost] cat 1.txt
love
Love
1ove
iove
[root@localhost] grep [^a-z] 1.txt
Love
1ove
[root@localhost] grep [^0-9]ove 1.txt
love
Love
iove

\:用来转义元字符(’ ’ ” “ \)

[root@localhost] cat 1.txt
love
Love
1ove
iove
.ove
[root@localhost] grep "\." 1.txt
.ove
[root@localhost] grep "\.ove" 1.txt
.ove[root@localhost]  ./configure \
> --with-user=www  \
>

\ <:词首定位符

[root@localhost] cat 1.txt
i love you
a love b
iloveyou
[root@localhost] grep "\<love" 1.txt
i love you
a love b
[root@localhost] cat 1.txt
i loveyou
loveyou
[root@localhost] grep "\<love" 1.txt
i loveyou
loveyou
[root@localhost] grep "^love" 1.txt
loveyou

\ >:词尾定位符

[root@localhost] cat 1.txt
i youlove
you  love
[root@localhost] grep "love\>" 1.txt
i youlove
you  love

():\ (…\ )

vim 1.txt: 3,9  s/\(.*\)/a\1/         #、\1代表调用前方的括号,每一行前面多个a,但是()会被误解所以加转义符\,做种意思就是3到9行加个a
vim 1.txt: 3,9  s/\(a\)\(.*\)/\2\1/   #、把a放到每行的句尾: 3,9  s/\(.*\)\(#\)/\1/     #、句尾的a去掉

x\ {m\ }:字符x重复出现m次

[root@localhost] cat 1.txt
love
loove
looove
[root@localhost] grep "o\{3\}"  1.txt
looove

x\ {m,\ }:字符x重复出现m次以上

[root@localhost] cat 1.txt
love
loove
looove
[root@localhost] grep "o\{1,\}"  1.txt    #一次以上
love
loove
looove

x\ {m,n\ }:字符x重复出现m到n次

[root@localhost] cat 1.txt
love
loove
looove
loooove
looooove
loooooove
[root@localhost] grep "o\{3,5\}"  1.txt
looove
loooove
looooove
loooooove

扩展正则表达式元字符:

+:匹配1~n个前导字符

[root@localhost] cat 1.txt
lve
loove
looove
loooove
looooove
loooooove
[root@localhost] egrep lo+ve 1.txt
loove
looove
loooove
looooove
loooooove
[root@localhost] egrep lo*ve 1.txt
lve
loove
looove
loooove
looooove
loooooove

?:匹配0~1个前导字符

[root@localhost] cat 1.txt
lve
love
loove
[root@localhost] egrep lo?ve 1.txt
lve
love

a|b:匹配a或b

[root@localhost] cat 1.txt
qwertyuiopsdfghjklxcvb
qwertyuiopasdfghjkmnbvc
nbvcxygfdqaeeryigygeus
awyiebgbfeygkcba

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNEo2qRK-1673151923096)(C:\Users\hyb\AppData\Roaming\Typora\typora-user-images\image-20221228132319481.png)]

():组字符

[root@localhost] cat 1.txt
rs
loyeable
lovers
[root@localhost] egrep  "love(able|rs)"  1.txt
loveable
lovers

3、示例

^[A-Z]..$    #开头一个大写,最后2个任意字符^[A-Z][a-z]*3[0-5]   #一个大写开头,0到多个小写或空格,包含3,最后是0到5的一个数字[a-z]*\.    #0到多个小写字母,最后一个点^ *[A-Z][a-z][a-z]$     # 0到多个空格开头,一个大写,一个小写,再一个小写结尾^[A-Za-z]*[^,][A-Za-z]*$  #0到多个字母开头,文中无逗号,0到多个英文结尾\<fourth\>   #找个单词\<f.*th>\  #找单词5\{2\}2\{3\}\.   #有两个5三个2最后以.结尾^[ \t]*$          #0到多个空格或tab的行^#                #  #开头的行^[ \t]*#           #  0到多个空格或tab开头的行,的注释行
[root@localhost procedures] grep  "^[ \t]*#"   1.txt
#            awdsw231dasdas[root@localhost] vim 1.txt
Occurence
occurence
accurence
:1,$ s/\([Oo]ccur\)ence/\1rence/  #1到最后一行,\1调用前面的[Oo]ccur
[root@localhost]cat 1.txt
Occurrence
occurrence
accurence[root@localhost] vim 1.txt
squareandfair
:1,$ s/\(square\)\(and\)\(fair\)/\3\2\1/  #\1\2\3调用前面的
[root@localhost] cat 1.txt
fairandsquare

二、grep

1、目的

过滤,查找文档中的内容

2、分类

grep egrep fgrep

3、返回值

0是找到了表示成功

1是没有,表示在所提供的文件无法找到匹配的pattern

2是找的地不对

示范:

[root@localhost ~] grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~] echo $?
0[root@localhost ~] grep 'root1' /etc/passwd
[root@localhost ~] echo $?
1[root@localhost ~] grep 'root' /etc/passwd1
grep: /etc/passwd1: 没有那个文件或目录
[root@localhost ~] echo $?
2

4、参数

grep -q 静默不显示,用来做判断

[root@localhost ~] grep -q 'root' /etc/passwd
[root@localhost ~] echo $?
0

grep -v 取反

[root@localhost ~] cat 1.txt
123
456
789
[root@localhost ~] grep 456 1.txt
456
[root@localhost ~] grep -v 456 1.txt
123
789

grep -R 可以查看目录下面的文件

[root@localhost ~] mkdir abc
[root@localhost ~] echo  123 > abc/1.txt
[root@localhost ~] grep 123  abc
grep: abc: 是一个目录
[root@localhost ~] grep 123 -R abc
abc/1.txt:123

grep -o 只找到关键字就可以

[root@localhost ~] grep -o root  /etc/passwd
root
root
root
root

grep -B2 前两行

[root@localhost ~] cat 1.txt
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
[root@localhost ~] grep -B2 ccc 1.txt
aaa
bbb
ccc

grep -A2 后两行

[root@localhost ~] cat 1.txt
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
[root@localhost ~] grep -A2 ccc 1.txt
ccc
ddd
eee

grep -C2 上下两行

[root@localhost ~] grep -C2 ccc 1.txt
aaa
bbb
ccc
ddd
eee

grep -n 带行号

[root@localhost ~] grep -C2  -n ccc 1.txt
1-aaa
2-bbb
3:ccc
4-ddd
5-eee

grep -l 只要文件

[root@localhost ~] grep 123 -l -R  abc
abc/1.txt

三、sed

1、前言

Sed是一种在线的,非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”。接着Ssed命令处理缓冲区中的内容处理完成后。 把缓冲区的内容送往屏幕,接着处理下一行。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作。

2、格式

sed 选项 命令 文件

sed 选项 -f 脚本文件

3、返回值

都是0,不管对错

只有当命令存在语法错误时,sed的退出状态才是非0

4、sed和正则表达式

与grep一样,sed在文件中查找模式时也可以使用正则表达式和各种元字符,正则表达式是包括在斜杠间的模式,用于查找和替换。使用正则要加-r选项

5、汇总示例

文件对象

[root@localhost ~] cat passwd
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

删除命令:d

[root@localhost ~] sed -r  "/root/d"  passwd
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
[root@localhost ~] cat passwd            #文件本身并没有发生修改
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -ri  "/root/d"  passwd     #-i选项文件发生改变(insert)
[root@localhost ~] cat passwd
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9[root@localhost ~] sed -r  "3d"  passwd         # 删除第三行
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r  "1,3d"  passwd     #删除1到3行
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r  '7,$d'  passwd
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6

替换命令:s

[root@localhost ~] sed  -r 's/root/aofa/' passwd      #将root替换为aofa,但是只是部分替换
aofa:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/aofa:/sbin/nologin10[root@localhost ~] sed  -r 's/root/aofa/g'  passwd  #加root全局替换
aofa:x:0:0:aofa:/aofa:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/aofa:/sbin/nologin10[root@localhost ~] sed -r 's/[0-9][0-9]$/&.5/' passwd  #&是调用前方内容与\1效果一样
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10.5[root@localhost ~] sed -r 's/(mail)/E\1/'   passwd  #把mail改成Email
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
Email:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@localhost ~] sed -r 's#(mail)#E\1#'   passwd #s###与上面的写法一样
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
Email:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@localhost ~] sed -r 's#/abc/123#/def/456#'    #将/abc/123替换为/def/456

读文件命令:r

[root@localhost ~] cat 1.txt
aaa
bbb
ccc
[root@localhost ~] sed -r '3r 1.txt'  passwd   #在第三行添加1.txt内容
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
aaa
bbb
ccc
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r '/root/r 1.txt'  passwd  #在root所在的行后面读取1.txt
root:x:0:0:root:/root:/bin/bash1
aaa
bbb
ccc
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
aaa
bbb
ccc

写文件命令:w(另存为)

[root@localhost ~] sed -r 'w 5.txt' passwd      #将所有内容另存为5.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@localhost ~] cat 5.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r '/root/w 6.txt' passwd   #另存有root得行
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@localhost ~] cat 6.txt
root:x:0:0:root:/root:/bin/bash1
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r '1,5w 7.txt' passwd    #将1到5行另存到7.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@localhost ~] cat 7.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5

追加命令:a(之后)

[root@localhost ~] sed -r 'a123' passwd    #逐行处理
root:x:0:0:root:/root:/bin/bash1
123
bin:x:1:1:bin:/bin:/sbin/nologin2
123
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
123
adm:x:3:4:adm:/var/adm:/sbin/nologin4
123
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
123
sync:x:5:0:sync:/sbin:/bin/sync6
123
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
123
halt:x:7:0:halt:/sbin:/sbin/halt8
123
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
123
operator:x:11:0:operator:/root:/sbin/nologin10
123[root@localhost ~] sed -r '3a123' passwd  #第三行追加信息
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
123
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r '3a123\    #插入多行
> 456\
> 789'  passwd
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
123
456
789
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

插入命令:i(之前)

[root@localhost ~] sed -r '3i123' passwd    #第三行之前
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
123
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

替换整行命令:c

[root@localhost ~] sed -r '1caaaaaaaaaaaaaaa' passwd   #替换第一行
aaaaaaaaaaaaaaa
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~]# sed -ri '/^SELINUX=/c  SELINUX=disabled' /etc/selinux/config
[root@localhost ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted[root@localhost ~] sed -r '2,3c33333\      #替换多行,把2到3行替换
> 444444'   passwd
root:x:0:0:root:/root:/bin/bash1
33333
444444
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

获取下一行命令:n

[root@localhost ~] sed -r '/root/{n;d}'  passwd    #删除root的下一行
root:x:0:0:root:/root:/bin/bash1
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r '/root/{n;s/sbin/ding/g}'  passwd  #把root下一行的sbin替换为ding
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/ding/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

反向选择:!

[root@localhost ~] sed -r '2,$d'  passwd        #删除2到最后一行
root:x:0:0:root:/root:/bin/bash1
[root@localhost ~] sed -r '2,$!d'  passwd     #删除2,$之外的行
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

多重编辑:e;

[root@localhost ~] sed -r  -e '1,3d' -e  '4s/adm/6666666/'  passwd   #删除1,3行,并且第四行的adm替换为6666666
6666666:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r  '1,3d;4s/adm/6666666/'  passwd   #效果同上
6666666:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] sed -r '2{s/sbin/ding/g;s/nologin/77777777/}'  passwd  #对第二行进行多个操作
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/ding/777777772
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10

6、实战案例

删除配置文件中的#注释行

安装vsftp程序
[root@localhost ~] sed -r '/^#/d'  /etc/vsftpd/vsftpd.conf

修改文件

[root@localhost ~] sed -ri '/^SELINUX=/c  SELINUX=disabled' /etc/selinux/config

追加变量

[root@localhost ~] var1=9999
[root@localhost ~] echo $var1
9999
[root@localhost ~] sed -r '1a$var1' 7.txt
root:x:0:0:root:/root:/bin/bash1
$var1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
[root@localhost ~] sed -r "1a$var1" 7.txt    #调用变量一定要用双引号
root:x:0:0:root:/root:/bin/bash1
9999
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5[root@localhost ~] sed -r "$a$var1" 7.txt #报错了,$a最后一行追加被误认为变量了
sed:-e 表达式 #1,字符 4:遗漏命令
[root@localhost ~] sed -r "\$a$var1" 7.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
9999

四、awk

1、前言

awk是一种编程语言,用于在Linux/Unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件、或其他命令的输出。它支持用户自定义函数和动态正则表达式等先进功能。

awk的处理文本和数据的方式是这样的。它逐行扫描文件,从第一行到最后一行寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕)。

2、工作原理

3、语法

  • awk [options] ‘commands’ filenames (推荐)

  • options:例如-F定义输入字段分隔符,默认的分隔符是空格和制表符(tab)

  • command(时空):BEGIN{} {} END{}

    BEGIN{}:发生在行处理前(注意大写)

    {}:行处理时,读一行执行一次

    END{}:行处理后

    示例:

[root@localhost ~] awk -F: 'BEGIN{print "哈哈。我的工作开始啦"} {print $1} END{print "终于干完了"}'  passwd
哈哈。我的工作开始啦
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
终于干完了

4、内部变量

FS :输入字段分隔符(默认空格)

[root@localhost ~] awk -F: '{print $1}'  passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
[root@localhost ~] awk  'BEGIN{FS=":"}{print $1}'  passwd    #同上
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

OFS:输出字段分割符(默认空格)

[root@localhost ~] awk  'BEGIN{FS=":";OFS="+++++"}{print $1,$2}'  passwd
root+++++x
bin+++++x
daemon+++++x
adm+++++x
lp+++++x
sync+++++x
shutdown+++++x
halt+++++x
mail+++++x
operator+++++x

RS:输入记录(行)分隔符,默认换行符

[root@localhost ~] cat 1.txt
111 222 333 444 555:666:777
[root@localhost ~] awk 'BEGIN{RS=" "} {print $0}'   1.txt
111
222
333
444
555:666:777

ORS:输出记录(行)分隔符,默认换行符

[root@localhost ~] awk 'BEGIN{ORS="\n"} {print $0}'   1.txt
111 222 333 444 555:666:777
aaa bbb ccc ddd fff ggg
[root@localhost ~] cat 1.txt
111 222 333 444 555:666:777
aaa bbb ccc ddd fff ggg
[root@localhost ~] awk 'BEGIN{ORS="++"} {print $0}'   1.txt
111 222 333 444 555:666:777++aaa bbb ccc ddd fff ggg++

FNR:多文件独立编号,同下

[root@localhost ~] awk '{print FNR,$0}'   1.txt  passwd   #以前是哪个文件行号是独立的
1 111 222 333 444 555:666:777
2 aaa bbb ccc ddd fff ggg
1 root:x:0:0:root:/root:/bin/bash1
2 bin:x:1:1:bin:/bin:/sbin/nologin2
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin3
4 adm:x:3:4:adm:/var/adm:/sbin/nologin4
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
6 sync:x:5:0:sync:/sbin:/bin/sync6
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
8 halt:x:7:0:halt:/sbin:/sbin/halt8
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
10 operator:x:11:0:operator:/root:/sbin/nologin10

NR:多文件汇总编号

[root@localhost ~] cat 1.txt   passwd
111 222 333 444 555:666:777
aaa bbb ccc ddd fff ggg
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] awk '{print NR,$0}'   1.txt  passwd   #总共处理多少行处理多少行
1 111 222 333 444 555:666:777
2 aaa bbb ccc ddd fff ggg
3 root:x:0:0:root:/root:/bin/bash1
4 bin:x:1:1:bin:/bin:/sbin/nologin2
5 daemon:x:2:2:daemon:/sbin:/sbin/nologin3
6 adm:x:3:4:adm:/var/adm:/sbin/nologin4
7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
8 sync:x:5:0:sync:/sbin:/bin/sync6
9 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
10 halt:x:7:0:halt:/sbin:/sbin/halt8
11 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
12 operator:x:11:0:operator:/root:/sbin/nologin10

NF:字段总数(自动统计列数)

[root@localhost ~] awk '{print NF,$0}'   1.txt
5 111 222 333 444 555:666:777
6 aaa bbb ccc ddd fff ggg
[root@localhost ~] awk '{print $NF}'   1.txt
555:666:777
ggg

5、格式化输出

print函数

[root@localhost ~] date | awk '{print "当前的年份是:" $1, "当前的月份是:" $2}'
当前的年份是:2023年 当前的月份是:01月[root@localhost ~] awk -F: '{print "账户名:",$1}'  passwd  | head -1
账户名: root[root@localhost ~] awk -F: '{print "账户名:",$1}'  passwd  | head -2
账户名: root
账户名: bin[root@localhost ~] awk -F: '{print "账户名:"$1 "\t用户ID是:" $3 }'  passwd  | head -2
账户名:root 用户ID是:0
账户名:bin      用户ID是:1

6、模式(正则表达)和动作

  • 概念:任何awk语句都由模式和动作组成。模式部分决定动作语句何时触发及触发事件。如果省略模式部分,动作将时刻保持执行状态。每一行都会有动作。模式可以是任何条件语句或复合语句或正则表达式。有模式的话,就是对模式对应的行进行动作。
  • 字符串比较
[root@localhost ~] awk -F: '/^root/'  passwd
root:x:0:0:root:/root:/bin/bash1
[root@localhost ~] awk -F: '$0 ~/^root/'  passwd  #字段像是以root开头的
root:x:0:0:root:/root:/bin/bash1[root@localhost ~] awk -F: '$0 !~/^root/'  passwd #字段不像是以root开头的
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] awk -F: '$1 ~/bin/'  passwd  #第一列像是bin
bin:x:1:1:bin:/bin:/sbin/nologin2
  • 数值比较

目的:比较表达式采用对文本进行比较,只有当条件为真,才执行指定的动作。比较表达式使用关系运算符用于比较数字与字符串。

关系运算符:

[root@localhost ~] awk -F: '$3>10' passwd   #查找用户ID大于10的用户
operator:x:11:0:operator:/root:/sbin/nologin10

算数运算 :+ - * / % ^(幂)

[root@localhost ~] awk -F: '$3 * 10 > 100' passwd    #哪个用户的ID乘以10大于100
operator:x:11:0:operator:/root:/sbin/nologin10
  • 多条件

逻辑操作符和复合模式(&&逻辑与,||逻辑或,!逻辑非)

[root@localhost ~] awk -F: '$1~/roo/ && $3 == 0' passwd #第一列像roo并且第三行是0
root:x:0:0:root:/root:/bin/bash

范围模式

语法 awk ‘/从哪里/,/到哪里/’ filename

[root@localhost ~]# cat passwd
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10[root@localhost ~] awk -F: '/adm/,/halt8/'  passwd  #匹配从adm到halt8
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8

7、awk脚本编程

  • 变量
自定义内部变量
[root@localhost ~] awk -F:  -v bianliang=mail  '$1 == bianliang'  passwd    #-v引入系统变量
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9         外部变量
[root@localhost ~] heihei=shutdown
[root@localhost ~] echo $heihei
shutdown
[root@localhost ~] awk -F: '$1 ~ "'"$heihei"'" '   passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
  • 条件&判断

if语句:

单分支:

格式 {if(表达式) {语句;语句;…}}

示例:如果$3是0,就说他是管理员

[root@localhost ~] awk -F: '{if($3==0){print $1 "是管理员"}}'   passwd
root是管理员

双分支

格式 {fi(表达式){语句;语句;…} else{语句;语句;…}}

示例1:如果$3是0,就说他是管理员,否则是普通用户

[root@localhost ~] awk -F: '{if($3==0){print $1 "是管理员"}else{print $1 "普通用户"}}'   passwd
root是管理员
bin普通用户
daemon普通用户
adm普通用户
lp普通用户
sync普通用户
shutdown普通用户
halt普通用户
mail普通用户
operator普通用户

示例2:统计管理员和系统用户数量

[root@localhost ~] awk -F: '{if($3==0){i++}else{a++}}  END{print "管理员数量:"i; print "系统用户数量:"a}'  passwd
管理员数量:1
系统用户数量:9

多分支

格式:{if(表达式1)} {语句;语句;…} else if(表达式2){语句;语句;…} else if(表达式3)

​ if()else if(){}else if(){}else{} 三分支

示例:显示出三种用户的信息

​ 管理员:0

​ 内置用户:用户ID<1000

​ 普通用户:用户ID>999

[root@localhost ~] awk -F: '{if($3==0){a++}else if($3>999){b++} else{c++}} END{print a;print b; print c}' /etc/passwd
1
24
19
  • 循环

while

示例:循环打印10个数字

[root@localhost ~] awk 'BEGIN{while(i<=10){print i;i++}}'
1
2
3
4
5
6
7
8
9
10

for

示例:循环打印5个数字

[root@localhost ~] awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
1
2
3
4
5
  • 数组

定义数组

示例:将用户名定义为数组的值,打印第一个值

[root@localhost ~] awk -F: '{username[++i]=$1}END{print username[1]}'  passwd
root

数组遍历

示例:遍历所有值

[root@localhost ~] awk -F: '{username[++i]=$1}END{for(i in username){print username[i]}}'  passwd
adm
lp
sync
shutdown
halt
mail
operator
root
bin
daemon

双分支

格式 {fi(表达式){语句;语句;…} else{语句;语句;…}}

示例1:如果$3是0,就说他是管理员,否则是普通用户


[root@localhost ~] awk -F: '{if($3==0){print $1 "是管理员"}else{print $1 "普通用户"}}'   passwd
root是管理员
bin普通用户
daemon普通用户
adm普通用户
lp普通用户
sync普通用户
shutdown普通用户
halt普通用户
mail普通用户
operator普通用户

示例2:统计管理员和系统用户数量

[root@localhost ~] awk -F: '{if($3==0){i++}else{a++}}  END{print "管理员数量:"i; print "系统用户数量:"a}'  passwd
管理员数量:1
系统用户数量:9

多分支

格式:{if(表达式1)} {语句;语句;…} else if(表达式2){语句;语句;…} else if(表达式3)

​ if()else if(){}else if(){}else{} 三分支

示例:显示出三种用户的信息

​ 管理员:0

​ 内置用户:用户ID<1000

​ 普通用户:用户ID>999

[root@localhost ~] awk -F: '{if($3==0){a++}else if($3>999){b++} else{c++}} END{print a;print b; print c}' /etc/passwd
1
24
19
  • 循环

while

示例:循环打印10个数字

[root@localhost ~] awk 'BEGIN{while(i<=10){print i;i++}}'
1
2
3
4
5
6
7
8
9
10

for

示例:循环打印5个数字

[root@localhost ~] awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
1
2
3
4
5
  • 数组

定义数组

示例:将用户名定义为数组的值,打印第一个值

[root@localhost ~] awk -F: '{username[++i]=$1}END{print username[1]}'  passwd
root

数组遍历

示例:遍历所有值

[root@localhost ~] awk -F: '{username[++i]=$1}END{for(i in username){print username[i]}}'  passwd
adm
lp
sync
shutdown
halt
mail
operator
root
bin
daemon

linux 【完结篇】第六章 shell编程及自动化运维--三剑客相关推荐

  1. Linux Shell编程及自动化运维实现 变量

    SHELL 前言 什么是shell shell壳命令解释器,一种应用程序. shell语言的特点SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称.Shell本身是一个用 ...

  2. abd shell关闭所有程序_第十六章 Shell编程

    第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...

  3. 《Linux/UNIX OpenLDAP实战指南》——1.8 自动化运维解决方案

    本节书摘来自异步社区<Linux/UNIX OpenLDAP实战指南>一书中的第1章,第1.8节,作者:郭大勇著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1 ...

  4. Linux疑难杂症解决方案100篇(六)-SHELL编程条件判断和流程控制

    今日目标: 熟悉条件判断语句,如判断整数.判断字符串等 熟悉流程控制语句基本语法,如if-else- 一.条件判断语法结构 思考:何为真(true)?何为假(false)? 1. 条件判断语法格式 格 ...

  5. 释放linux缓存文件命令,Linux定时释放缓存Shell脚本实现自动化运维 | kTWO-个人博客...

    使用Linux服务器的用户应该都知道,Linux在使用的时候,可用内存会随着时间慢慢的变小,最终可能到80%-90%,这个时候就需要我们去人工干预,来进行魂村的释放. 本文将使用Linux的Cron定 ...

  6. Linux集群和自动化运维

    Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...

  7. c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...

    第4章shell编程 4 1shell编程简介4 2shell分类4 3shell基本语法4 4shell程序的变量和参数4 5shell的测试表达式4 6shell的控制结构4 7awk4 8sed ...

  8. 沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇)

    沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇) 7-1 输出学生成绩 (20分) 本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩.最高成绩和最低成绩.建议使用 ...

  9. Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)

    实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...

最新文章

  1. IIS 的身份验证简要说明 - 摘录
  2. 英文文献中的一些单词
  3. [python](windows)分布式进程问题:pickle模块不能序列化lambda函数
  4. H3 BPM微信接入配置
  5. VTK修炼之道28:图像统计_灰度直方图计算
  6. 软件开发模式:瀑布与敏捷
  7. 吴恩达深度学习5.1笔记_Sequence Models_循环序列模型
  8. [原]tornado 源码分析系列目录
  9. 北京地铁5号线地图(线路图、站名、实拍pp)
  10. 背包九讲----02完全背包问题
  11. 2012r2备域控服务器搭建,Windows Server 2012 R2域控制器部署
  12. python期权定价公式_美式期权BAW定价的Python3实现
  13. SM6125平台扩容camera id的修改方法
  14. 餐厅扫码点餐怎么弄_分享扫码点餐小程序开发制作方法
  15. MQTT.fx连接阿里云物联网平台
  16. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...
  17. Facebook技术探究:Delos中的虚拟共识机制
  18. python docx转换成txt文本
  19. 联合作战态势可视化决策系统
  20. 西游记下界为妖的神仙坐骑

热门文章

  1. 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具
  2. 基于jetson nano和yolov5 的车行人检测(二)
  3. 待办提醒事项app下载 待办提醒便签手机版下载
  4. 突发 , Android 出大事情了!谷歌官宣安卓改名,换新 Logo!
  5. 这是关于RadioButton一个坑爹的问题,请让我自杀好吗!
  6. 数据危机!被LocK勒索病毒加密的数据文件如何成功恢复?
  7. Sql优化系列之(1)__where子句条件优化
  8. Adobe InDesign CC 2019 语言切换
  9. c语言写一元一次函数图像,【仿真】绘制一次函数图像
  10. Day31——面向对象编程思想,类与对象