实用脚本(一)

1.编写SHELL脚本,将文件系统使用率超过80%的目录输出

#!/bin/bash
df | sed 's/%//' | awk '$5>=80'

2.使用sed命令在文件file中第一行和第三行之后添加字符串"hello world"

(1)sed '1s/$/hello world/;3s/$/hello world/' x.txt
(2)sed '1a hello world;3a hello world' x.txt

3.设计一个shell程序,在/userdata目录下建立50个目录.即user1-user50并设置每个目录的权限,所有者权限为:读写执行,所属组权限为:读,执行,其他人:只读

#!/bin/bash
for i in {1..50}
do
	mkdir -p /userdata/user$i
	chmod 754 /userdata/user$i
done

4.使用ping命令编写脚本来查询一组IP地址检测他们是否处于活跃的状态.要求(range:192.168.1.200-192.168.1.220,一个IP发送4的ping包,ping的过程不能输出到终端)

#!/bin/bash
for i in {200..220}
do	
	ping -c 4 -i 0.2 -W 1 192.168.1.$i &> /dev/null
	if [ $? -eq 0 ];then
		echo "192.168.1.$i is up"
	else	
		echo "192.168.1.$i is down"
	fi
done

5.编写SHELL脚本将/usr/local/test 目录下大于100k的文件转移到/tmp目录下

#!/bin/bash
find /usr/local/test -size +100k -exec cp {} /tmp/ \;

6.查询/var/log/secure日志里八点到九点的日志信息

awk '$3>="08:00:00"&&$3<="09:00:00"' /var/log/secure

7.统计系统中使用bash作为登录shell的用户总个数
a.预处理时赋值变量x=0
b.然后逐行读入/etc/passwd文件,如果发现登录的shell是/bin/bash则加1
c.全部处理完毕后,输出x的值

#awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd
(awk常用内置变量:		
	$0 文本当前行的全部内容		
	$1	文本的第1列		
	$2	文件的第2列		
	$3	文件的第3列,依此类推		
	NR	文件当前行的行号		
	NF	文件当前行的列数(有几列)
	)

8.格式化输出/etc/passwd文件
要求:格式化输出passwd文件内容时,要求第一行为列表标题,中间打印用户的名称 UID 家目录信息,最后一行提示一共处理文本的总行数

awk -F: 'BEGIN{print "User\tUID\tHome"}\
{print $1 "\t" $3 "\t" $6}\
END{print "Total",NR,"lines."}' /etc/passwd

9.统计/etc/passwd文件中UID大于1000的用户个数:

awk -F: '{if($3>1000){i++}}END{print i}' /etc/passwd

10.统计/etc/passwd文件中登录Shell是“/bin/bash”的用户个数

awk -F: '{if($7~/bash$/){i++}}END{print i}' /etc/passwd
  1. 分别统计/etc/passwd文件中登录Shell是“/bin/bash”、 登录Shell不是“/bin/bash”的用户个数:
awk -F: '{if($7~/bash$/){i++}else{j++}} END{print i,j}' /etc/passwd
  1. AWK数组
    数组的语法格式(可以存储多个值的变量)
    (1)定义数组的格式:数组名【下标】=元素值
    (2)调用数组的格式:数组名【下标】
    (3)遍历数组的用法:for(变量 in 数组名){print 数组名【变量】}
    #################################################################
    举个栗子:#awk ‘BEGIN{a[0]=11;a[1]=88;print a[1],a[0]}’ (88 11)
    #awk ‘BEGIN{a++;print a}’ (1)
    #awk ‘BEGIN{a0++;print a0}’ (1)
    #awk ‘BEGIN{a[0]++;print a[0]}’
    [root@svr5 ~]# awk ‘BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}’
    注意,awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号:
    [root@svr5 ~]# awk 'BEGIN{a[“hehe”]=11;print a[“hehe”]}'11
    #################################################################
    13.问题:
    (1)分析web日志的访问量排名,要求获得客户机的IP、访问次数,并且按照访问次数排名
    (2)在分析Web日志文件时,每条访问记录的第一列就是客户机的IP地址,其中会有很多重复的IP地址。因此只用awk提取出这一列是不够的,还需要统计重复记录的数量并且进行排序。
    通过awk提取信息时,利用IP地址作为数组下标,每遇到一个重复值就将此数组元素递增1,最终就获得了这个IP地址出现的次数。针对文本排序输出可以采用sort命令,相关的常见选项为-r、-n、-k。其中-n表示按数字顺序升序排列,而-r表示反序,-k可以指定按第几个字段来排序。

1)提取IP地址及访问量

[root@svr5 ~]# awk '{ip[$1]++} \
>  END{for(i in ip) {print ip[i],i }}' /var/log/httpd/access_log
 4		127.0.0.14. 
17 		192.168.4.55. 
13		192.168.4.1106. .. ..

2)对第1)步的结果根据访问量排名

[root@svr5 ~]# awk  '{ip[$1]++} END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log | sort -nr
	17 192.168.4.5
	13 192.168.4.110
	4 127.0.0.1
	```


   






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河 静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值