1.按照时间生成文件2018-05-22.log将每天的磁盘使用状态写入到对应日期的文件
[root@manager zhoumo]
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]
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]
File=$
(find
/backup
/ -type f
-name
"*.txt")
for i in
$File
do
mv $i $i.bak
done
sleep 1
echo "改名成功。。"
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]
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]
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 ~]
2、按字母出现频率降序排序!
[root@manager ~]
10.写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些
[root@manager zhoumo]
for i in
{1
..255
}
do {
ip=10
.0
.0
.$i
ping
-W1
-c1
$ip &>
/dev
/null
if [ $?
-eq 0
];then
echo "$ip 当前在线"
else
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]
caidan
(){
cat<<EOF
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
--
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]
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]
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