shell脚本--------AWK小工具的控制语句(与if、if...else、if...else if...else、for循环、while循环相结合)以及各种实用案例

1、AWK脚本编程之控制语句格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、实例

(1)打印uid大于300小于4000的用户和uid

[root@server1 bin]# awk -F: 'OFS=":"{if($3>=300 && $3<=4000 ) {print $1,$3} }' /etc/passwd      //定义输出分隔符为“:”,且如果第三域的值小于4000大于300.就将第一域和第三域的值打印。
polkitd:999
libstoragemgmt:998
colord:997
saslauth:996
setroubleshoot:995
gluster:994
chrony:993
unbound:992
geoclue:991
gnome-initial-setup:990
kiosk:1000
varnish:989
ps:1001
j:1002
l:1008
ll:1009
u1:1010
u2:1011
u3:1012
u4:1013
u5:1014

(2)按照规定语句打印出管理员

[root@server1 bin]# awk -F: '{if($3==0){print $1,"is admin"} }' /etc/passwd   //“,”默认为一个空格,所以中间加一个逗号。$1不能放在双引号里面,否则会直接打印出来。
root is admin

(3)如果为0打印是管理员,其他打印是普通用户。

[root@server1 bin]# awk -F: '{if($3==0){print $1,"is admin\n"}else{print $1,"is not admin\n"} }' /etc/passwd
root is admin

bin is not admin

daemon is not admin

adm is not admin

lp is not admin

(4)
在这里插入图片描述
第一个:如果uid大于等于500且不等于65534,那么打印该用户$1为普通用户,否则打印$1不是普通用户;

第二个:如果id  -u的结果大于等于500且不等于65534,那么打印该用户$1为普通用户,否则打印$1不是普通用户。 

注意这里不能使用反撇号来执行命令,只能使用$()符号,因为具有嵌套.

(5)
在这里插入图片描述
第一个:如果$3=0,打印是管理员;如果$3大于等于1且小于等于499,打印是系统用户;其他打印是普通用户。

第二个:如果$3=0,将i加1;如果$3大于等于1且小于等于499,或者$3等于65534,将j加1;其他给k加1;最后打印管理员个数为i,系统用户为j,普通用户为k。
(5)用awk实现

1
12
123
1234
12345
[root@server1 bin]# awk 'BEGIN{for(i=1;i<=5;i++) {for(j=1;j<=i;j++) {printf j};print }}'   //第一个printf是为了让一个大循环也就是每一行的数字不换行输出,第二个print是为了让每小于i个j打印完后换行输出。
1
12
123
1234
12345

3、AWK统计实例

在AWK中关联数组不用声明,变量不用引用也不用加双引号,普通字符串加双引号

(1)统计系统中各种种类的bash

[root@server1 bin]# awk -F: '{shell[$NF]++};END{for(i in shell) {print i":"shell[i]} }'   /etc/passwd        //{shell[$NF]++}是对文件进行处理,所以在end之前。
/bin/sync:1
/bin/bash:28
/sbin/nologin:42
/sbin/halt:1
/sbin/shutdown:1

(2)统计网站访问状态

[root@server1 bin]# netstat -antl|grep 80|awk  '{print$6}'|awk '{state[$1]++};END{for(i in state) {print i":"state[i]}}'      //经过grep过滤awk截取后,连接状态以逐行的方式显示在屏幕界面,而awk处理文件行,所以我们通过管道符重定向标准输入。接下来通过关联数组将其存储,方法同上一个一样。
LISTEN:1
ESTABLISHED:7
FIN_WAIT2:2
TIME_WAIT:1

(3)统计访问网站的每个IP数量

[root@server1 bin]# netstat -antl|grep 80|awk '{print$5}'|awk '{IP[$1]++};END{for(i in IP) {print i":"IP[i]}}'
192.168.13.129:80:1
192.168.13.129:42822:1
192.168.13.134:50512:1
0.0.0.0:*:1
192.168.13.134:50508:1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值