SHELL脚本-文本三剑客
grep
常用选项
选项 描述 补充 -E 扩展正则(ERE) –extended–regexp -P 内置正则 Perl -i 忽略大小写 –ignore–case -n 打印行号 –line–number -o 只打印匹配的内容 –only–matching -c 只打印每个文件匹配的行数 –count -B 打印匹配的前几行 –before–context=NUM -A 打印匹配的后几行 –after–context=NUM -C 打印匹配的前后几行 –context=NUM –color=auto 高亮显示匹配内容 默认设定 -v 取反,打印不匹配的行 –invert–match -e 多点操作
结合正则表达式使用
基础正则
符号 描述 备注 . 匹配任意单个字符(必须存在) ^ 匹配以某个字符开头的行 $ 配以什么字符结尾的行 ^$ 匹配空行 * 匹配前面的一个字符出现0次或者多次 .* 表示任意长度的任意字符 [list] 匹配list中的任意单个字符 [ ^list] 匹配除list中的任意单个字符 ^[list] 匹配以list中的任意单个字符开头的 ^[ ^list] 匹配除list中的任意单个字符开头的 < 以什么开头 符号中有\ > 以什么结尾 符号中有\ <> 精确匹配 符号中有\ {n} 匹配前面的字符连续出现n次 符号中有\ {n,} 匹配前面的字符至少出现n次 符号中有\ {m,n} 表示匹配前面的字符出现至少m次,至多n次 符号中有\ (strings) 保存被匹配的字符,后面可以用标签\1代替 符号中有\
Perl内置正则(-P)
符号 描述 备注 \d 匹配数字 [0-9] \w 匹配字母数字下划线 [a-zA-Z0-9_] \s 匹配空格、制表符、换页符 [\t\r\n]
扩展正则表达式(-E)
符号 描述 备注 + 匹配一个或多个前面的字符 ? 匹配零个或一个前面的字符 | 或 () 组字符 (taobao|baidui).com {n} 前导字符重复n次 符号中没有\ {n,} 前导字符重复至少n次 符号中没有\ {n,m} 前导字符重复n到m次 符号中没有\
案例:查看配置文件时去除所有的注释和空行
[root@server1 ~]
HostKey / etc/ ssh/ ssh_host_rsa_key
HostKey / etc/ ssh/ ssh_host_ecdsa_key
HostKey / etc/ ssh/ ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile . ssh/ authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp / usr/ libexec/ openssh/ sftp- server
sed
概述
可以非交互编辑文件,常用于shell脚本中 sed把当前正在处理的行 保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,不会直接修改原文件 (如果想修改原文件,加上相应的参数即可),完成后把处理后的行发送到屏幕上。
语法
命令行使用
sed [option] '地址定位|sed的命令' filename
常用选项
- e 进行多项编辑
- n 取消默认的输出
- f 指定sed脚本的文件名
- r 使用扩展正则表达式
- i 修改源文件
常用命令
p 打印行
d 删除行
i 在当前行的上一行插入
$i 在最后一行的上一行插入
a 在当前行的下一行插入
$a 在最后一行的下一行插入(追加)
c 替换整行内容
r 读取
w 另存为
! 取反
s 查找替换
g 替换全行
& 替换串中引用查找串内容
= 打印行号
[root@server1 ~]
打印文件
[root@server1 ~]
root:x:0:0:root:/ root:/ bin/ bash
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
[root@server1 ~]
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
打印1- 3行
[root@server1 ~]
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
删除行
[root@server1 ~]
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
[root@server1 ~]
单行插入
[root@server1 ~]
hello
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
多行插入
[root@server1 ~]
hello
world
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
[root@server1 ~]
> linux\
> world' test.txt
#通过换行符,多行插入
追加
[root@server1 ~]# sed ' $ahello ' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
hello
替换
[root@server1 ~]# sed ' 1chello world' test.txt
hello world
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
匹配替换
#匹配语法:/匹配的内容/
[root@server1 ~]# sed ' / bin/ chello' test.txt #查找含bin的行,替换为hello
hello
hello
hello
hello
hello
读取
[root@server1 ~]# sed ' $r / etc/ hosts' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.226.40 admin
192.168.226.10 node1
192.168.226.20 node2
192.168.226.30 node3
另存为
[root@server1 ~]# sed ' 1, 3w 111' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@server1 ~]# cat 111
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@server1 ~]# sed -n ' / root/ w 111' test.txt #将含有root的行另存到111中
[root@server1 ~]# cat 111
root:x:0:0:root:/root:/bin/bash
取反
[root@server1 ~]# sed -n ' 1, 3! p' test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
查找替换
[root@server1 ~]# sed -n ' s/ root/ ROOT/ p' test.txt #默认替换第一个
ROOT:x:0:0:root:/root:/bin/bash
[root@server1 ~]# sed -n ' s/ root/ ROOT/ gp ' test.txt #替换全行
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
自定义分隔符(一般用于查找或替换的内容种含有/分隔符时)
[root@server1 ~]# sed -n ' s
bin:x:1:1:bin:/ bin:/ bin/ bash
daemon:x:2:2:daemon:/ sbin:/ bin/ bash
adm:x:3:4:adm:/ var / adm:/ bin/ bash
lp :x:4:7:lp :/ var / spool/ lpd:/ bin/ bash
批量注释
[root@server1 ~]
去掉文件中所有特殊字符
[root@server1 ~]
rootx00rootrootbinbash
binx11binbinsbinnologin
daemonx22daemonsbinsbinnologin
保存查找串以便在替换串中引用
[root@server1 ~]
root hello:x:0:0:root hello:/ root hello:/ bin/ bash
[root@server1 ~]
root hello:x:0:0:root hello:/ root hello:/ bin/ bash
打印行号
[root@server1 ~]
1
多项编辑
[root@server1 ~]
1
root:x:0:0:root:/ root:/ bin/ bash
修改原文件
[root@server1 ~]
[root@server1 ~]
ROOT:x:0:0:ROOT:/ ROOT:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
选项/命令 说明 用法 -n 取消默认输出 -e 进行多项编辑 sed -ne ‘/nologin$/=’ -ne ‘/nologin$/p’ 1.txt -f 指定文件名 可不加 -r 扩展正则 -i 修改源文件 不能同-i选项和p命令一起使用 p 打印行 sed -n ‘1,5p’ a.txt d 删除行 sed -n ‘1d’ a.txt i 在当前行的上一行插入 sed ‘1ihello\nworld’ test.txt $i 在最后一行的上一行插入 a 在当前行的下一行插入 sed ‘5ahello’ a.txt $a 追加 c 替换整行内容 sed ‘1,5chello world’ a.txt r 读取 sed ‘3r /etc/hosts’ 2.txt w 另存为 sed ‘/root/w a.txt’ 2.txt ! 取反 sed -n ‘1!p’ 1.txt s 查找替换 sed -n ‘s/root/ROOT/p’ 1.txt g 替换全行 sed -n ‘s/root/ROOT/gp’ 1.txt & 替换串中引用查找串内容 sed -n ‘s/root/#&/p’ a.txt = 打印行号 sed -n ‘/bash$/=’ 1.txt
案例
方法1
[root@server1 ~]
HostKey / etc/ ssh/ ssh_host_rsa_key
HostKey / etc/ ssh/ ssh_host_ecdsa_key
HostKey / etc/ ssh/ ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile . ssh/ authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp / usr/ libexec/ openssh/ sftp- server
方法2
[root@server1 ~]
HostKey / etc/ ssh/ ssh_host_rsa_key
HostKey / etc/ ssh/ ssh_host_ecdsa_key
HostKey / etc/ ssh/ ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile . ssh/ authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp / usr/ libexec/ openssh/ sftp- server
方法3
[root@server1 ~]
HostKey / etc/ ssh/ ssh_host_rsa_key
HostKey / etc/ ssh/ ssh_host_ecdsa_key
HostKey / etc/ ssh/ ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile . ssh/ authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp / usr/ libexec/ openssh/ sftp- server
方法1
[root@server1 ~]
inet 192. 168. 226. 10 netmask 255. 255. 255. 0 broadcast 192. 168. 226. 255
[root@server1 ~]
192. 168. 226. 10 255. 255. 255. 0 192. 168. 226. 255
方法2
[root@server1 ~]
inet
192. 168. 226. 10
netmask
255. 255. 255. 0
broadcast
192. 168. 226. 255
[root@server1 ~]
192. 168. 226. 10
255. 255. 255. 0
192. 168. 226. 255
脚本中使用
编写sed脚本时,需添加其相应的魔法字符(命令解释器) 只需要写’······'之间的内容 一行一条命令 命令后注意不能有空格
[root@server1 ~]
1, 3d
s/ root/ hello/ g
2iworld
[root@server1 ~]
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
[root@server1 ~]
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
[root@server1 ~]
[root@server1 ~]
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
awk
概述
awk是一种编程语言,awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。 完整的awk脚本通常用来格式化文本 文件中的信息。 通常,awk是以文件的行 为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本 awk分别代表其三个作者姓氏的第一个字母,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。 gawk是awk的开源版本,在linux系统中已把awk链接到gawk。
[root@server1 ~]
lrwxrwxrwx. 1 root root 4 7月 24 17:32 / bin/ awk - > gawk
命令模式使用
语法
awk 选项 '正则,地址地位{awk语句}' 文件名
常用选项
- F 指定分隔符,可指定一个或多个,默认的分隔符是空格
- v 定义变量并赋值
’command’ 里面书写规范
正则匹配
'/^root/{awk语句}'
[root@server1 ~]
root:x:0:0:root:/ root:/ bin/ bash
bin:x:1:1:bin:/ bin:/ sbin/ nologin
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
adm:x:3:4:adm:/ var / adm:/ sbin/ nologin
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
[root@server1 ~]
root:x:0:0:root:/ root:/ bin/ bash
地址定位
'NR==1,NR==5{awk语句}'
[root@server1 ~]
daemon:x:2:2:daemon:/ sbin:/ sbin/ nologin
多条awk语句用; 分隔
[root@server1 ~]
daemon 2
[root@server1 ~]
daemon
2
BEGIN END 使用
'BEGIN{awk语句};{处理中};END{awk语句}'
'BEGIN{awk语句};{处理中}'
'{处理中};END{awk语句}'
[root@server1 ~]
Login_shell Login_home
* ** ** ** *
/ bin/ bash / root
/ sbin/ nologin / bin
/ sbin/ nologin / sbin
/ sbin/ nologin / var / adm
/ sbin/ nologin / var / spool/ lpd
/ bin/ sync / sbin
/ sbin/ shutdown / sbin
/ sbin/ halt / sbin
/ sbin/ nologin / var / spool/ mail
/ sbin/ nologin / root
/ sbin/ nologin / usr/ games
/ sbin/ nologin / var / ftp
/ sbin/ nologin /
/ sbin/ nologin /
/ sbin/ nologin /
/ sbin/ nologin /
/ sbin/ nologin / var / empty/ sshd
/ sbin/ nologin / var / spool/ postfix
/ sbin/ nologin / usr/ share/ httpd
/ sbin/ nologin / dev/ null
/ sbin/ nologin / var / lib/ zabbix
/ bin/ bash / home/ cephu
/ sbin/ nologin / etc/ ntp
* ** ** ** ** **
内部变量
变量 变量说明 备注 $0 当前处理行的所有记录 $1,$2,$3…$n 文件中每行以间隔符号分割的不同字段 ‘{print $1,$3}’ NF 当前记录的字段数(列数) ‘{print NF}’ $NF 最后一列 $(NF-1)表示倒数第二列 NR 行号 ‘NR==2{print $7}’ FNR 行号(用法同上) FS 定义输入 字段分隔符,默认空格 ‘BEGIN{FS=":"};{print $1,$3}’ OFS 定义输出 字段分隔符,默认空格 ‘BEGIN{OFS="\t"};print $1,$3}’ RS 定义输入 记录分割符,默认换行 ‘BEGIN{RS="\t"};{print $0}’ ORS 定义输出 记录分割符,默认换行 ‘BEGIN{ORS="\n\n"};{print $1,$3}’ FILENAME 当前输入的文件名
定义输入分隔符
[root@server1 ~]
root / bin/ bash
bin / sbin/ nologin
daemon / sbin/ nologin
adm / sbin/ nologin
lp / sbin/ nologin
[root@server1 ~]
root / bin/ bash
bin / sbin/ nologin
daemon / sbin/ nologin
adm / sbin/ nologin
lp / sbin/ nologin
定义输出分隔符
[root@server1 ~]
root / bin/ bash
bin / sbin/ nologin
daemon / sbin/ nologin
adm / sbin/ nologin
lp / sbin/ nologin
[root@server1 ~]
root / bin/ bash
bin / sbin/ nologin
daemon / sbin/ nologin
adm / sbin/ nologin
lp / sbin/ nologin
[root@server1 ~]
root / bin/ bash
bin / sbin/ nologin
daemon / sbin/ nologin
adm / sbin/ nologin
lp / sbin/ nologin
定义输入记录分隔符
[root@server1 ~]
1 123^I456^I789$
2 234 567$
3 sdvffrrvf$
4 ddfd sdg^Ifhh^Idd$
[root@server1 ~]
123
456
789
234 567
sdvffrrvf
ddfd sdg
fhh
dd
定义输出记录分割符
[root@server1 ~]
123 456 789
234 567
sdvffrrvf
ddfd sdg fhh dd
[root@server1 ~]
123 456 789 234 567 sdvffrrvf ddfd sdg fhh dd [root@server1 ~]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lQBGTnRM-1632147942425)(…/%E5%9B%BE%E7%89%87%E6%94%BE%E7%BD%AE%E7%82%B9/image-20210918154138794.png)]
工作流程
以awk -F: '{print $1,$NF}' /etc/passwd
为例
awk使用一行作为输入,并将这一行赋给内部变量$0,每一行就是一个记录,以换行符(RS)结束 每行被间隔符冒号(FS)分解成字段,每个字段存储在已编号的变量中,从$1开始,到$NF结束 awk使用print函数打印字段,打印出来的字段会以空格分隔,因为$1,$NF之间有一个逗号。逗号比较特殊,它映射为另一个内部变量OFS,OFS默认为空格 awk处理完一行后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕
结合正则使用
运算符 说明 == 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 ~ 匹配 !~ 不匹配 ! 逻辑非 && 逻辑与 || 逻辑或
从以lp 开头的行匹配到第10行
[root@server1 ~]
lp :x:4:7:lp :/ var / spool/ lpd:/ sbin/ nologin
sync:x:5:0:sync:/ sbin:/ bin/ sync
shutdown:x:6:0:shutdown:/ sbin:/ sbin/ shutdown
halt:x:7:0:halt:/ sbin:/ sbin/ halt
mail:x:8:12:mail:/ var / spool/ mail:/ sbin/ nologin
operator:x:11:0:operator:/ root:/ sbin/ nologin
打印6- 10行
[root@server1 ~]
sync:x:5:0:sync:/ sbin:/ bin/ sync
shutdown:x:6:0:shutdown:/ sbin:/ sbin/ shutdown
halt:x:7:0:halt:/ sbin:/ sbin/ halt
mail:x:8:12:mail:/ var / spool/ mail:/ sbin/ nologin
operator:x:11:0:operator:/ root:/ sbin/ nologin
打印6- 10行,以nologin结尾的行
[root@server1 ~]
mail:x:8:12:mail:/ var / spool/ mail:/ sbin/ nologin
operator:x:11:0:operator:/ root:/ sbin/ nologin
格式化输出printf
% s 字符类型
% d 数值类型
- 表示左对齐,不加默认右对齐
\n 换行,printf默认行尾不换行
[root@server1 ~]
/ bin/ bash / root
/ sbin/ nologin / bin
/ sbin/ nologin / sbin
/ sbin/ nologin / var / adm
/ sbin/ nologin / var / spool/ lpd
/ bin/ sync / sbin
/ sbin/ shutdown / sbin
/ sbin/ halt / sbin
/ sbin/ nologin / var / spool/ mail
/ sbin/ nologin / root
/ sbin/ nologin / usr/ games
/ sbin/ nologin / var / ftp
/ sbin/ nologin /
/ sbin/ nologin /
/ sbin/ nologin /
/ sbin/ nologin /
/ sbin/ nologin / var / empty/ sshd
/ sbin/ nologin / var / spool/ postfix
/ sbin/ nologin / usr/ share/ httpd
/ sbin/ nologin / dev/ null
/ sbin/ nologin / var / lib/ zabbix
/ bin/ bash / home/ cephu
/ sbin/ nologin / etc/ ntp
脚本编程
脚本执行
[root@server1 ~]
BEGIN { FS=":" }
NR==1, NR==3{ print $1 "\t" $NF }
[root@server1 ~]
root / bin/ bash
bin / sbin/ nologin
daemon / sbin/ nologin
定义变量
[root@server1 ~]
1
1
1
1
[root@server1 ~]
1
选择执行
awk 选项 '正则,地址定位{if(条件){语句1;语句2;...}}' 文件名
awk 选项 '正则,地址定位{if(条件){语句1;语句2;...} else{语句1;语句2;...}}' 文件名
awk 选项 '正则,地址定位{if(条件1){语句1;语句2;...} else if(条件2){语句1;语句2;...} else{语句1;语句2;...}}' 文件名
案例:打印普通用户的UID和用户名
[root@server1 ~]
cephu 1000
zhnagsan 1001
lisi 1002
[root@server1 ~]
root 非普通用户
bin 非普通用户
daemon 非普通用户
adm 非普通用户
lp 非普通用户
sync 非普通用户
shutdown非普通用户
halt 非普通用户
mail 非普通用户
operator非普通用户
games 非普通用户
ftp 非普通用户
nobody 非普通用户
systemd- network 非普通用户
dbus 非普通用户
polkitd 非普通用户
sshd 非普通用户
postfix 非普通用户
apache 非普通用户
tss 非普通用户
zabbix 非普通用户
cephu 1000
zhnagsan 1001
lisi 1002
[root@server1 ~]
root 管理员
bin 系统用户
daemon 系统用户
adm 系统用户
lp 系统用户
sync 系统用户
shutdown系统用户
halt 系统用户
mail 系统用户
operator系统用户
games 系统用户
ftp 系统用户
nobody 系统用户
systemd- network 系统用户
dbus 系统用户
polkitd 系统用户
sshd 系统用户
postfix 系统用户
apache 系统用户
tss 系统用户
zabbix 系统用户
cephu 普通用户
ntp 系统用户
zhnagsan普通用户
[root@server1 ~]
1个管理员
21个系统用户
3个普通用户
循环语句
打印1, 3, 5, 7, 9
[root@server1 ~]
1
3
5
7
9
[root@server1 ~]
1
3
5
7
9
算数运算
可以进行小数运算
+ - * / % ( 模) * * ( 幂) 都可以运算
[root@server1 ~]
8
[root@server1 ~]
0. 666667
案例
打印ip地址
[root@server1 ~]
192. 168. 226. 10
[root@server1 ~]
192. 168. 226. 10
255. 255. 255. 0
192. 168. 226. 255
统计/ etc/ passwd 中各种类型shell的数量
[root@server1 ~]
/ bin/ sync 1
/ bin/ bash 4
/ sbin/ nologin 18
/ sbin/ halt 1
/ sbin/ shutdown 1