56.shell while实践③

1.按照时间生成文件2018-05-22.log将每天的磁盘使用状态写入到对应日期的文件

[root@manager zhoumo]# cat var1.sh 
#!/usr/bin/bash

Date=$(date +%F)
Path=/backup/log

[ -d $Path ] || mkdir -p $Path
df -h >> $Path/$Date.log

2.统计Nginx日志中每个IP的访问量有多少,日志如下:

192.168.56.1 - - [21/May/2018:20:44:06 -0400] "GET /index.html HTTP/1.0" 404 169 "-" "ApacheBench/2.3" "-"/code/index.html

awk '{print $1}' access.log |sort |uniq -c |sort -nr

3.写一个脚本计算一下Linux系统所有进程占用内存大小的和。

[root@manager zhoumo]# cat var3.sh 
#!/usr/bin/bash

mem=$(ps aux |awk '{print $6}' |grep -v "RSS")

sum=0
for i in $mem
do
	sum=$(( $sum + $i))
done
	echo "总的内存大小为:$sum" 
	echo "以人性化显示为: $[ $sum / 1024 ] M "

4.在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件

	1.批量修改txt为txt.bak
	2.把所有的.bak文件打包压缩为123.tar.gz
	3.批量还原文件的名字,及把增加的.bak再删除
[root@manager zhoumo]# cat var4.sh 
#!/usr/bin/bash

File=$(find /backup/ -type f -name "*.txt")
#1.修改
for i in $File
do
	mv $i $i.bak
done
	sleep 1
	echo "改名成功。。"
#2.打包
Bak_File=$(find /backup/ -type f -name "*.bak")
tar czf /backup/123.tar.gz ${Bak_File} &> /dev/null
	sleep 1
	echo "打包成功。。"

for i in $Bak_File
do
	mv  $i ${i%.*}
done
	echo "还原成功。。"

5.把一个文本文档的前五行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉

6.写个shell,看看你的linux系统中是否有自定义用户(普通用户),若是有,一共有几个?

[root@manager zhoumo]# cat var5.sh 
#!/usr/bin/bash

num=$(awk -F ":" '$3>1000' /etc/passwd |wc -l)
if [ $num -gt 0 ];then

	echo "你的Linux系统中有$num个普通用户"
else
	echo "No common users"
fi

方式二:
[root@manager zhoumo]# cat var5.sh 
#!/usr/bin/bash

i=0
while read line
do
	User_Uid=$(echo $line |awk -F ":" '{print $3}')	
	User=$(echo $line |awk -F ":" '{print $1}')	
	User_shell=$(echo $line |awk -F ":" '{print $NF}')
	if [ $User_Uid -ge 1000 -a $User_shell == "/bin/bash" ];then
		
		echo "$User 是普通用户"
		let i++
	fi

done</etc/passwd
	echo "一共有$i个用户"

7.写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10

思路:我们要用到一个文件就是.bash_history,然后再去sort、uniq
一条命令即可:
sort /root/.bash_history |sort |uniq -c |sort -nr |head

8.实践

用shell处理以下内容
1、按单词出现频率降序排序!
2、按字母出现频率降序排序!
the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation

    1、按单词出现频率降序排序!
[root@manager ~]# echo "the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation" |sed 's#[,.]# #g' |xargs -n1 |sort |uniq -c |sort -nr

    2、按字母出现频率降序排序!
[root@manager ~]# echo "the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation" |sed 's#[,.]# #g'|grep -o '[a-Z]' |sort |uniq -c |sort -nr

10.写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些

[root@manager zhoumo]# cat var9.sh 
#!/usr/bin/bash

for i in {1..255}
do {
	ip=10.0.0.$i
	#1.第一次判断
	ping -W1 -c1 $ip &> /dev/null
	if [ $? -eq 0 ];then
		echo "$ip 当前在线"
else
	#2.如果判断第一次不存活,则在进行一次for循环,循环3次
	for j in {1..3}
	do
	ping -W1 -c1 $ip &> /dev/null
	if [ $? -eq 0 ];then
		echo "$ip 主机存活"
	else
		echo "$ip 当前未在线"

fi	

	done
fi
	} &
done
	wait

需求3:使用case实现系统管理工具箱。

Command action
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序

[root@manager zhoumo]# cat caidan.sh 
#!/usr/bin/bash

caidan(){
cat<--------------------------------------------------
		Command action
		h 显示命令帮助
		f 显示磁盘分区
		d 显示磁盘挂载
		m 查看内存使用
		u 查看系统负载
		q 退出程序
--------------------------------------------------
EOF
}
caidan
while true
do
	read -p "请选择你要查看系统的选项:[ h | f | d | m | u | q ]" Action
	case $Action in
		h)
			clear
			caidan
			;;
		f)
			fdisk -l
			;;
		d)
			df -Th
			;;		
		m)
			free -m
			;;
		u)
			uptime
			;;
		q)
			exit 1
			;;
		*)
			read -p "请选择你要查看系统的选项:[ h | f | d | m | u | q ]" Action

	esac
done

需求3:使用case、循环、函数、实现JumpServer跳板机功能。

1.用户登陆该服务器则自动执行该脚本。
2.脚本提示可连接主机列表。
3.该脚本无法直接退出。

1.用户登陆该服务器则自动执行该脚本。 pass
2.脚本提示可连接主机列表。
3.该脚本无法直接退出。		pass
[root@chengyinwu tmp]# cat fun7.sh
#!/bin/bash
#********************************************************************
#Author: chengyinwu
#QQ: 991540698
#Date: 2019-11-04
#FileName: fun7.sh
#URL: https://www.yinwucheng.com
#Description: 
#********************************************************************

meminfo () {
cat <<-EOF
----------------------------------
------请选择你要连接的主机--------
|       1) lb01-172.16.1.5       |
|       2) lb02-172.16.1.6       |
|       3) web01-172.16.1.7      |
|       4) web02-172.16.1.8      |
|       5) web03-172.16.1.9      |
|       6) db01-172.16.1.51      |
|       7) redis-172.16.1.52     |
|       8) nfs-172.16.1.31       |
|       9) backup-172.16.1.41    |
|       h) help                  |
---------------------------------
EOF
}

#调用函数
meminfo
trap "" HUP INT TSTP

while true
do
	read -p "请选择你要连接的主机:" Host
	case $Host in
		1|lb01)
			ssh root@172.16.1.5
			;;
		2|lb02)
			ssh root@172.16.1.6
			;;
		3|web01)
			ssh root@172.16.1.7
			;;
		4|web02)
			ssh root@172.16.1.8
			;;
		5|web03)
			ssh root@172.16.1.9
			;;
		6|db01)
			ssh root@172.16.1.51
			;;
		7|redis)
			ssh root@172.16.1.52
			;;
		8|nfs)
			ssh root@172.16.1.31
			;;
		9|backup)
			ssh root@172.16.1.41
			;;
		h)
			clear
			meminfo
			;;
		exec)
			exit
			;;
		*)
			continue
	esac

done

5.case场景示例,实现多级菜单功能。

[root@chengyinwu tmp]# cat caidan.sh
#!/bin/bash
#********************************************************************
#Author: chengyinwu
#QQ: 991540698
#Date: 2019-11-04
#FileName: caidan.sh
#URL: https://www.yinwucheng.com
#Description: 
#********************************************************************

mem_option () {
cat <<-EOF
----------------主菜单--------------
|  1) Install Nginx |
|  2) Install MySQL |
|  3) Install PHP   |
|  4) quit          |
------------------------------------
EOF
}

mem_install_nginx () {
cat <<-EOF
-------------Install Nginx----------
|  1) Install Nginx1.12 |
|  2) Install Nginx1.13 |
|  3) Install Nginx1.14 |
|  4) 返回上一级菜单    |
------------------------------------
EOF
}

mem_install_mysql () {
cat <<-EOF
-------------Install MySQL----------
|  1) Install MySQL5.6 |
|  2) Install MySQL5.7 |
|  3) Install MySQL7.0 |
|  4) 返回上一级菜单   |
------------------------------------
EOF
}

mem_install_php () {
cat <<-EOF
-------------Install PHP----------
|  1) Install php-fpm 7.1 |
|  2) Install php-fpm 7.2 |
|  3) Install php-fpm 7.3 |
|  4) 返回上一级菜单      |
-----------------------------------
EOF
}
	while true
	do
	mem_option
	read -p "请选择对应的选项:[ 1 | 2 | 3 | 4 ]" mem_1
	case $mem_1 in
	1)
		clear
		while true
		do
		mem_install_nginx
		read -p "请选择你要安装nginx的版本:[ 1 | 2 | 3 | 4 ]" mem_2
		case $mem_2 in
			1)
				echo "install nginx1.12 is done..."
				;;
			2)
				echo "install nginx1.13 is done..."
				;;
			3)
				echo "install nginx1.14 is done..."
				;;
			4)
				clear
				break
				;;
			esac
			done
			;;
	2)
		clear 
		while true
		do
		mem_install_mysql
		read -p "请选择你要安装mysql的版本:[ 1 | 2 | 3 | 4 ]" mem_3
		case $mem_3 in
			1)
				echo "install mysql5.6 is done..."
				;;
			2)
				echo "install mysql5.7 is done..."
				;;
			3)
				echo "install mysql7.0 is done..."
				;;
			4)
				clear
				break
				;;
		
			esac
			done
			;;
	3)
		clear 
		while true
		do
		mem_install_php
		read -p "请选择你要安装php的版本:[ 1 | 2 | 3 | 4 ]" mem_4
		case $mem_4 in
			1)
				echo "install php7.1 is done..."
				;;
			2)
				echo "install php7.2 is done..."
				;;
			3)
				echo "install php7.3 is done..."
				;;
			4)
				clear
				break
				;;
			esac
			done
			;;
	4)
		exit
		;;
	*)
		continue
	esac
done

你可能感兴趣的:(shell脚本)