linux 【完结篇】第六章 shell编程及自动化运维--三剑客
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编程及自动化运维--三剑客相关推荐
- Linux Shell编程及自动化运维实现 变量
SHELL 前言 什么是shell shell壳命令解释器,一种应用程序. shell语言的特点SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称.Shell本身是一个用 ...
- abd shell关闭所有程序_第十六章 Shell编程
第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...
- 《Linux/UNIX OpenLDAP实战指南》——1.8 自动化运维解决方案
本节书摘来自异步社区<Linux/UNIX OpenLDAP实战指南>一书中的第1章,第1.8节,作者:郭大勇著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1 ...
- Linux疑难杂症解决方案100篇(六)-SHELL编程条件判断和流程控制
今日目标: 熟悉条件判断语句,如判断整数.判断字符串等 熟悉流程控制语句基本语法,如if-else- 一.条件判断语法结构 思考:何为真(true)?何为假(false)? 1. 条件判断语法格式 格 ...
- 释放linux缓存文件命令,Linux定时释放缓存Shell脚本实现自动化运维 | kTWO-个人博客...
使用Linux服务器的用户应该都知道,Linux在使用的时候,可用内存会随着时间慢慢的变小,最终可能到80%-90%,这个时候就需要我们去人工干预,来进行魂村的释放. 本文将使用Linux的Cron定 ...
- Linux集群和自动化运维
Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...
- c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...
第4章shell编程 4 1shell编程简介4 2shell分类4 3shell基本语法4 4shell程序的变量和参数4 5shell的测试表达式4 6shell的控制结构4 7awk4 8sed ...
- 沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇)
沈阳师范大学大一上册C语言PTA题目集以及答案(第六章 指针 编程题篇) 7-1 输出学生成绩 (20分) 本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩.最高成绩和最低成绩.建议使用 ...
- Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)
实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...
最新文章
- IIS 的身份验证简要说明 - 摘录
- 英文文献中的一些单词
- [python](windows)分布式进程问题:pickle模块不能序列化lambda函数
- H3 BPM微信接入配置
- VTK修炼之道28:图像统计_灰度直方图计算
- 软件开发模式:瀑布与敏捷
- 吴恩达深度学习5.1笔记_Sequence Models_循环序列模型
- [原]tornado 源码分析系列目录
- 北京地铁5号线地图(线路图、站名、实拍pp)
- 背包九讲----02完全背包问题
- 2012r2备域控服务器搭建,Windows Server 2012 R2域控制器部署
- python期权定价公式_美式期权BAW定价的Python3实现
- SM6125平台扩容camera id的修改方法
- 餐厅扫码点餐怎么弄_分享扫码点餐小程序开发制作方法
- MQTT.fx连接阿里云物联网平台
- android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...
- Facebook技术探究:Delos中的虚拟共识机制
- python docx转换成txt文本
- 联合作战态势可视化决策系统
- 西游记下界为妖的神仙坐骑
热门文章
- 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具
- 基于jetson nano和yolov5 的车行人检测(二)
- 待办提醒事项app下载 待办提醒便签手机版下载
- 突发 , Android 出大事情了!谷歌官宣安卓改名,换新 Logo!
- 这是关于RadioButton一个坑爹的问题,请让我自杀好吗!
- 数据危机!被LocK勒索病毒加密的数据文件如何成功恢复?
- Sql优化系列之(1)__where子句条件优化
- Adobe InDesign CC 2019 语言切换
- c语言写一元一次函数图像,【仿真】绘制一次函数图像
- Day31——面向对象编程思想,类与对象