一、测试IP地址是否通畅
1.业务需求
使用shell脚本,用户输入主机IP地址,测试主机网络是否通畅
2.脚本代码
#!/bin/bash
##############################################################
# File Name: xian-read.sh
# Time: 2020-04-21-10:25:39
# Author: lixian
# Organization: www.lixian.fun
##############################################################
#提示用户输入一个IP地址进行测试
read -p "主人!请输入需要测试的服务器IP地址:" Ip
#根据用户输入的IP地址进行测试判断
ping -c1 -W1 $Ip &>/dev/null
#根据命令的执行结果进行返回给用户
if [ $? -eq 0 ];then
echo -e "\033[42;37mIP地址${Ip}是通畅的\033[0m"
else
echo -e "\033[41;37mIP地址${Ip}是不通的\033[0m"
fi
3.脚本说明
(1)首先read -p 让用户先输入个IP地址,并将IP地址赋个变量
(2)根据用户输入的变量值调用变量,使用ping命令ping用户输入的IP
(3)使用if判断语句,$?是否为0 ,也就是说为0 则上一条命令执行成功,然后输出echo内容
(4)如果$?不为0 则上一条命令执行失败,输出echo内容
4.执行脚本结果
5.颜色代码
使用规则:echo输出内容 将文字改为你所需要的内容即可
echo -e "\033[40;37m 黑底白字 \033[0m" echo -e "\033[41;37m 红底白字 \033[0m" echo -e "\033[42;37m 绿底白字 \033[0m" echo -e "\033[43;37m 黄底白字 \033[0m" echo -e "\033[44;37m 蓝底白字 \033[0m" echo -e "\033[45;37m 紫底白字 \033[0m" echo -e "\033[46;37m 天蓝底白字 \033[0m" echo -e "\033[47;30m 白底黑字 \033[0m"
二、修改主机名
1.业务需求
使用shell脚本,修改本机的主机名。
2.脚本代码
#!/bin/bash
##############################################################
# File Name: xian-read-sethostname.sh
# Time: 2020-04-21-11:19:15
# Author: lixian
# Organization: www.lixian.fun
##############################################################
read -p "输入需要修改的主机名:" HostName
#提示用户是否真正的修改主机名
read -p "你是否确认要修改的主机名为:${HostName},[y|n]:" Confirm
#根据用户的输入判断是否进行修改主机名
if [ "$Confirm" == "y" ];then
echo "你选择了要改主机名"
hostnamectl set-hostname $HostName &>/dev/null
if [ $? -eq 0 ]; then
echo "主机名修改成功"
bash
else
echo "主机名修改失败"
exit
fi
elif [ "$Confirm" == "n" ];then
echo "你选择了不修改主机名"
exit
else
echo "你输入的不正确!请输入y或者n"
fi
3.脚本说明
(1)首先read -p让用户输入需要修改的主机名,并将输入的内容设为变量HostName
(2)还是用read -p让用户确认是否进行修改,让用户输入y或者n,也就是修改或者不修改,并将y或者n设置变量Confirm
(3)使用if判断语句判断用户输入的变量Confirm是否为y,如果用户输入的值为y,则使用hostnamectl 命令修改主机名,主机名为用户输入的变量hostnamectl 的值
(4)下面再进行判断,判断上一条修改主机名是否成功,如果成功则输出修改成功,如果修改主机名失败,则输出失败,其实就是告诉用户是否修改成功
(5)如果用户输入n,也就是不修改主机名,则echo输出不修改,并退出脚本
(6)如果用户输入不是y也不是n,则告诉用户输入的不正确,请输入y或者n。
4.执行脚本结果
三、修改主机IP地址
1.业务需求
使用shell脚本,用户根据执行脚本提示,修改本机的IP地址。
2.脚本代码
#!/bin/bash
##############################################################
# File Name: xian-read-eth.sh
# Time: 2020-04-21-11:57:22
# Author: lixian
# Organization: www.lixian.fun
##############################################################
#提示用户输入IP地址最后一位
read -p "请显哥哥输入需要更改IP地址的最后一位:" IP
#提示用户是否需要更改IP地址
read -p "显哥哥确定要修改IP地址吗?[y|n]" Confirm
#开始执行命令修改IP地址
if [ "$Confirm" == y ];then
echo "显哥哥选择了要修改IP地址,满足你...正在修改中...请稍后..."
sed -ri "s#(IPADDR.*\.)(.*)#\1$IP#g" /etc/sysconfig/network-scripts/ifcfg-eth[01] &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37mIP地址修改成功...\033[0m"
read -p "下面需要重启网络服务使IP生效,显哥哥是否需要重启网络服务? [y|n] " Confirm
if [ "$Confirm" == y ];then
echo "正在重启网络服务..."
echo -e "\033[42;37m即将断开连接!请显哥哥使用新的IP地址访问服务器!\033[0m"
systemctl restart network &>/dev/null
if [ $? -ne 0 ];then
echo "网络重启失败!请检查网络服务!"
fi
elif [ "$Confirm" == n ];then
echo -e "\033[41;37m显哥哥选择不重启网络服务,可以手动重启哦~不然IP地址不会生效的呢~\033[0m"
exit
else
echo -e "\033[41;37m显哥哥输入的信息有误,输入y或者n 就可以了呢~\033[0m"
exit
fi
else
echo "IP地址修改失败~请主人检查脚本哦~"
fi
elif [ "$Confirm" == n ];then
echo -e "\033[41;37m显哥哥选择了不修改IP地址!\033[0m"
exit
else
echo -e "\033[41;37m显哥哥输入的信息有误,输入y或者n 就可以了呢~\033[0m"
exit
fi
3.脚本说明
(1)首先read -p 让用户输入所要修改的IP地址最后一位,并将输入的值设置变量IP
(2)让用户确认是否需要修改IP地址,如果y则确认修改,如果n则不修改,如果不是y也不是n则告诉用户输入的内容有误
(3)用户确认修改了,使用sed命令修改网卡配置文件,将文件内IP地址的最后一位替换用户所输入的变量IP
(4)修改配置文件之后,if判断是否修改成功,如果成功则需要重启网络服务使IP生效,如果失败则返回失败信息
(5)重启网卡服务需要用户输入y或者n,如果输入y则重启,输入n则不重启
(6)如果选择了重启,则需要判断是否重启成功并返回给用户结果
4.执行脚本结果
四、查看当前系统内存的使用状态
1.业务需求
使用shell脚本,查看当前系统内存的使用状态,如果内存大于80%,将报警信息发邮件给用户
2.脚本代码
#!/bin/bash
##############################################################
# File Name: xian-mail-free.sh
# Time: 2020-04-21-15:36:00
# Author: lixian
# Organization: www.lixian.fun
##############################################################
#将使用率的大小定义为一个变量
Mem_Used=`free -m |awk '/Mem/{print $3/$2*100}'`
#根据变量的值来判断
if [ ${Mem_Used%.*} -gt 80 ];then
echo -e "\033[41;37m当前内存使用率过高!使用率为:${Mem_Used}%\033[0m"
echo "当前内存使用率过高!使用率为:${Mem_Used}%" |mail -s "内存使用率过高!" lixian656@qq.com &>/dev/null
if [ $? -eq 0 ];then
echo "主人,我已经发邮件通知你啦!"
else
echo "哎呀,发送邮件失败啦!"
fi
else
echo -e "\033[42;37m当前内存使用率正常!使用率为:${Mem_Used}%\033[0m"
fi
mail.rc邮件配置
[root@xian /server/scripts]# vim /etc/mail.rc set from=lixian656@qq.com set smtp=smtp.qq.com set smtp-auth-user=lixian656@qq.com set smtp-auth-password=#授权码 set smtp-auth=login set smtp=smtps://smtp.qq.com:465 set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/
内存压力测试
dd if=/dev/zero of=/root/ll.log bs=750M count=10 10+0 records in 10+0 records out 7864320000 bytes (7.9 GB) copied, 76.913 s, 102 MB/s
3.脚本说明
(1)首先使用awk命令取出当前系统的内存值,并将值设置为变量Mem_Used
(2)其次判断变量值是否大于80,如果大于80则输出使用率,并将大于80使用率发送给用户邮箱,判断是否发送成功
(3)如果内存使用率小于80则直接输出使用率
4.执行脚本结果
五、备份文件或目录
1.业务需求
使用shell脚本,对文件目录进行备份,备份文件要以时间和IP地址及目录名命名
2.脚本代码
#!/bin/bash
##############################################################
# File Name: xian-backup.sh
# Time: 2020-04-21-16:18:43
# Author: lixian
# Organization: www.lixian.fun
##############################################################
#定义变量
Back_Dir=/backup
Ip=$(ifconfig eth0 |awk 'NR==2{print $2}')
Date=$(date +%F)
#提示用户输入要备份的数据目录
read -p "请输入你要备份的目录:" Data_Dir
#判断备份的目录是否存在,存在则不进行创建,不存在则创建
[ -d $Back_Dir ] || mkdir -p $Back_Dir
#判断数据目录是否存在
if ls -d $Data_Dir &>/dev/null;then
cd / && tar czf $Back_Dir/${Date}_${Ip}_${Data_Dir#/}.tar.gz ${Data_Dir#/} &>/dev/null && cd - &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37m数据目录${Back_Dir}备份成功!\033[0m"
else
echo -e "\033[41;37m数据目录${Back_Dir}备份失败!\033[0m"
fi
else
echo -e "\033[41;37m你要备份的数据目录${Data_Dir}不存在\033[0m"
fi
3.脚本说明
(1)备份目录首先定义变量,因为需备份文件需要以时间、IP地址和目录名命名,而且它们是变化的,所以要把时间、IP地址和目录名设置变量
(2)用户首先输入需要备份的数据目录,接下来判断目标备份目录是否存在,如果存在就执行tar命令进行备份,否则输出目录不存在
(3)备份的过程调用之前的变量,以时间、IP地址和目录名命名
(4)判断tar备份是否成功,如果成功则输出结果,反正备份失败
4.执行脚本结果
六、脚本修改IP地址和主机名
#!/bin/bash
##############################################################
# File Name: ip-hostname.sh
# Time: 2020-04-21-22:10:46
# Author: lixian
# Organization: www.lixian.fun
##############################################################
#提示用户需要修改主机名和IP地址
read -p "输入需要修改的主机名:" HostName
read -p "输入需要修改的IP地址的最后一位:" IP
#提示用户确认需要修改吗
read -p "您确定要修改主机名和IP地址吗?[y|n]" Confirm
if [ "$Confirm" == y ];then
#修改主机名和IP地址
echo "您确定了修改...请稍后..."
hostnamectl set-hostname $HostName &>/dev/null
if [ $? -eq 0 ]; then
echo -e "\033[42;37m主机名修改成功...\033[0m"
else
echo -e "\033[41;37m主机名修改失败...\033[0m"
fi
sed -ri "s#(IPADDR.*\.)(.*)#\1$IP#g" /etc/sysconfig/network-scripts/ifcfg-eth[01] &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37mIP地址修改成功...\033[0m"
read -p "下面需要重启网络服务使IP生效,显哥哥是否需要重启网络服务? [y|n] " Confirm
if [ "$Confirm" == y ];then
echo "正在重启网络服务..."
echo -e "\033[42;37m即将断开连接!请显哥哥使用新的IP地址访问服务器!\033[0m"
systemctl restart network &>/dev/null
if [ $? -ne 0 ];then
echo -e "\033[41;37m网络重启失败!请检查网络服务!\033[0m"
fi
elif [ "$Confirm" == n ];then
echo -e "\033[41;37m显哥哥选择不重启网络服务,可以手动重启哦~不然IP地址不会生效的呢~\033[0m"
exit
else
echo -e "\033[41;37m显哥哥输入的信息有误,输入y或者n 就可以了呢~\033[0m"
exit
fi
fi
fi
七、Shell的变量替换
1.Shell的变量替换
${#变量} #获取变量值的长度
${变量#匹配规则} #从头开始匹配,最短删除
${变量##匹配规则} #从头开始匹配,最长删除
${变量%匹配规则} #从尾开始匹配,最短删除
${变量%%匹配规则} #从尾开始匹配,最长删除
${变量/旧的字符串/新的字符串} #替换变量中旧的字符串为新的字符串,只替换第一个匹配到
${变量//旧的字符串/新的字符串} #替换变量中旧的字符串为新的字符串,全部替换
${变量:匹配规则:匹配规则} #索引及切片
2.案例
[root@xian /server/scripts]# url=www.lixian.fun
[root@xian /server/scripts]# echo ${url}
www.lixian.fun
[root@xian /server/scripts]# echo ${#url} #获取长度
14
[root@xian /server/scripts]# echo www.lixian.fun |wc -L #wc命令获取长度
14
[root@xian /server/scripts]# echo ${url#*.} #从前往后,最短匹配到的删除
lixian.fun
[root@xian /server/scripts]# echo ${url##*.} #从前往后,最长匹配到的删除
fun
[root@xian /server/scripts]# echo ${url%.*} #从后往前匹配,最短删除
www.lixian
[root@xian /server/scripts]# echo ${url%%.*} #从后往前匹配,最长删除
www
[root@xian /server/scripts]# echo ${url/w/W} #把w替换成W,只替换第一个匹配到的
Www.lixian.fun
[root@xian /server/scripts]# echo ${url//w/W} #把w替换成W,替换所有的
WWW.lixian.fun
[root@xian /server/scripts]# echo ${url:4:6} #从4列开始匹配,切出6列
lixian
[root@xian /server/scripts]# echo ${url:4} #删除前4列
lixian.fun
八、小案例
1.案例
在/backup下创建10个.txt的文件,提前创建好,找到/backup目录下所有后缀名为.txt的文件
1)批量修改txt为txt.bak
2)把所有的.bak文件打包压缩为123.tar.gz
3)批量还原文件的名字,及把增加的.bak再删除
2.shell脚本
#!/bin/bash
##############################################################
# File Name: bakup.sh
# Time: 2020-04-21-23:34:02
# Author: lixian
# Organization: www.lixian.fun
##############################################################
cd /backup
find ./ -type f -name '*.txt' |xargs -I {} rename "txt" "txt.bak" {}; &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37m批量修改txt为txt.bak成功...\033[0m"
else
echo -e "\033[41;37m批量修改txt为txt.bak失败...\033[0m"
fi
tar czf 123.tar.gz `find ./ -type f -name '*.txt.bak'` &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37m文件打包压缩为123.tar.gz成功...\033[0m"
else
echo -e "\033[41;37m文件打包压缩为123.tar.gz失败...\033[0m"
fi
find ./ -type f -name '*.txt.bak' |xargs -I {} rename "txt.bak" "txt" {}; &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[42;37m批量还原文件的名字成功...\033[0m"
else
echo -e "\033[41;37m批量还原文件的名字失败...\033[0m"
fi







