不光好玩,还实用的shell脚本六剑客
Posted Friends of the wind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不光好玩,还实用的shell脚本六剑客相关的知识,希望对你有一定的参考价值。
剑客一:令狐冲
提示:精通技术-独孤九剑
编写监控脚本,监控系统资源占用情况
脚本存放位置:/shell
脚本名称:checksys.sh
监控内容:监控服务器CPU、内存使用率情况,并显示系统当前时间及运行时间
显示要求:要求中文显示,每秒更新一次监控数据
1)分析:分解需求,先显示四项内容,再满足每秒刷新一次,就用到sleep,让其休眠1秒再显示监控数据。
2)编写脚本:
#!/bin/bash
while true
do
DATE=$(uptime | awk '{print $1}')
UPTIME=$(uptime | awk '{print $3}')
CPU=$(top -b -n 1 | awk '/Cpu/{print $8}')
MEM=$(expr $(free | awk '/Mem/{print $3}') \\* 100 / $(free | awk '/Mem/{print $2}'))
echo "当前时间:$DATE"
echo "运行时间:$UPTIME分钟"
echo "CPU使用率:$CPU%"
echo "内存使用率:$MEM%"
sleep 1
clear
done
脚本截图:
3)验证:执行sh checksys.sh显示如下图,并每秒刷新一次
剑客二:任盈盈(令狐冲他女票)
精通:撒娇(女人的秘密武器)
编写批量创建用户脚本,要求可以在屏幕内输入要创建的用户名、创建数量 ,并为其设置初始密码为123.com
1)编写脚本
#!/bin/bash
read -p "请输入芳名:" USER
read -p "创建数量:" NUM
if grep -w $USER /etc/passwd
then
echo "$USER 芳名已存在,退出!"
else
for i in $(seq 1 $NUM)
do
useradd $USER$i
echo "123.com" | passwd --stdin $USER$i &> /dev/null
done
echo "老铁!活干完啦"
fi
2)验证:
剑客三:岳不群(小令他师傅,差点是他岳父)
精通:辟邪剑法(虽是林家的,但人家学到手了,结果是成功就行)
编写备份脚本,备份目录/var/log/所有日志,备份到/log/bak/,每周日凌晨2点做备份。
分析:先确定源和目标,备份源是/var/log/所有日志,隐含意思是仅备份.log结尾文件;目标路径在/log/bak/,我们检测这个目录是否存在,不存在则创建;最后编好的脚本放到计划任务即可!
1)编写脚本:
#!/bin/bash
if [ -d /log/bak/ ] || mkdir -p /log/bak/
then
tar Pcf /log/bak/log_$(date +%Y%m%d)''$(date +%H%M%S).tar.gz /var/log/*.log
echo "干完!可以约会啦"
fi
2)测试脚本:
3)设置执行权,添加计划任务(注意,计划任务的脚本必须设置执行权。)
4)调整系统时间做最后验证
剑客四:令狐冲他师娘(曾经也是一代女侠)
提示:以Apache为例。
编写交互式脚本,判断一个服务是否运行,
如果服务没有运行则启动服务,
如果服务没有安装则安装服务并启动
1)编写脚本:所有脚本中最简单的一个
#!/bin/bash
systemctl status httpd &> /dev/null
if [ $? -eq 0 ]
then
echo "老铁!Apache没毛病"
else
echo "完犊子了!Apache挂了,重启成功"
systemctl start httpd &> /dev/null
fi
2)验证:
剑客五:东方不败(他的剑小到变成一根针)
编写脚本,要求输入对应的代码,显示相关信息,B与b等同,只有输入Q与q才退出实现以下效果。
1)编辑脚本:
#!/bin/bash
echo "A.主机IP"
echo "B.磁盘剩余空间"
echo "C.系统运行时间"
echo "Q.退出"
IP=`ifconfig ens33 | awk '/netmask/{print $2}'`
D=`df | grep "/$" | awk '{print $5}'`
R=`uptime | awk '{print $3}'`
while true
do
read -p "请输入你要查询的数据:" DATA
case $DATA in
A|a)
echo "主机IP是:$IP"
;;
B|b)
echo "磁盘剩余空间:$D"
;;
C|c)
echo "系统运行时间:$C"
;;
Q|q)
exit
echo "退出,欢迎下次再使用"
;;
*)
echo "不允许比我还帅,重选"
esac
done
2)验证:
剑客六:独孤
跨主机巡检脚本, 3台主机 第1台 master 第2台node1 第3台node2
要求在master上执行 checknode.sh可以获得这三台主机的巡检信息:
信息包括:
主机名称
主机IP
运行时间
Cpu使用率
内存使用率
磁盘使用率
磁盘剩余空间
分析:复杂案例,我们必须先分析,理清思路,制定步骤。跨主机,又要自动,必须请大神expect来帮忙,请神帮忙之前最重要的是:部署好基础环境,保障三台主机互相Ping通,防火墙安全策略允许等等。
1)编辑脚本,设置执行权
vim ~/expect.sh
chmod a+x ~/expect.sh
#!/bin/bash
cat > /root/hosts << a
192.168.2.4 root 123456
192.168.2.5 root 123456
a
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
while read line
do
user=`echo $line | cut -d " " -f 2`
ip=`echo $line | cut -d " " -f 1`
passwd=`echo $line | cut -d " " -f 3`
expect <<EOF
set timeout 10
spawn scp -r /root/.ssh $ip:/root
expect {
"yes/no" { send "yes\\n";exp_continue }
"password" { send "$passwd\\n" }
}
expect eof
EOF
done < hosts
2)搭建环境(关闭防火墙,setenforce试试手动可否输入密码)
这步提示输入,证明环境没问题了!
3)执行脚本
4)编写监控脚本:
DATE=$(date +%F\\ %T)
UPTIME=$(uptime | awk '{print $3}')
CPU=$(top -b -n 1 | grep "Cpu" |awk '{print $8}')
MEM=$(expr $(free | grep "Mem" | awk '{print $3}') \\* 100 / $(free | grep "Mem" | awk '{print $2}'))
H=$(hostname)
I=$(ifconfig | awk 'NR==2{print $2}')
D=$(df -hT | grep "/$" | awk '{print $6}')
Y=$(df -hT | grep "/$" | awk '{print $5}')
echo "主机名称:$H"
echo "主机IP:$I"
echo "当前时间:$DATE"
echo "运行时间:$UPTIME分钟"
echo "CPU使用率:$CPU%"
echo "内存占用率:$MEM%"
echo "磁盘使用率:$D"
echo "磁盘剩余空间:$Y"
截图:
5)推送到node1、node2并执行脚本获取相关信息
拷贝:
执行:
以上是关于不光好玩,还实用的shell脚本六剑客的主要内容,如果未能解决你的问题,请参考以下文章