题目要求:
1、ping主机测试,查看主机是否存活;
2、判断一个用户是否存在;
3、判断当前内核主版本是否为3,且次版本是否大于10;
4、判断vsftpd软件包是否安装,如果没有则自动安装;
5、判断httpd是否运行;
6、判断指定的主机是否能ping通,必须使用$1变量;
7、报警脚本,要求如下:
根分区剩余空间小于20%
内存已用空间大于80%
向用户alice发送告警邮件
配合crond每5分钟检查一次
[root@locaklhost ~]# echo “邮件正文” | mail -s “邮件主题” alice
8、判断用户输入的是否是数字,如果是数字判断该数字是否大于10;
9、计算用户输入的任意两个整数的和、差、乘积、商、余数,
判断用户输入的参数是否是两个,如果不是,提示用法;
判断用户输入的是否是整数,如果不是,则给出提示终止运行。
解题代码如下:
1、ping主机测试,查看主机是否存活
编辑配置:
[root@localhost ex01]# vim 1.sh
#!/bin/bash
read -p "please enter a host ip:" ip
if ping -c 5 $ip > /dev/null
then echo "the host is alive!"
else
echo "the host is dead!"
fi
[root@localhost ex01]# chmod 755 1.sh
测试:
192.168.15.128是本虚拟机的IP地址,192.168.15.68是不存在的IP地址
2、判断一个用户是否存在
编辑配置:
[root@localhost ex01]# vim 2.sh
#!/bin/bash
read -p "please enter a username:" name
if id $name | grep uid > /dev/null
then echo " the user is exist!"
else
echo "the user is not exist!"
fi
[root@localhost ex01]# chmod 755 2.sh
测试:
3、判断当前内核主版本是否为3,且次版本是否大于10
查看内核版本
[root@localhost ex01]# uname -srm
Linux 4.18.0-193.el8.x86_64 x86_64
主版本是:4
次版本是:18
先测试一下命令的可行性
编辑配置:
[root@localhost ex01]# vim 3.sh
#!/bin/bash
if [ `uname -srm | cut -d . -f 1 | cut -d " " -f 2` -eq 3 ]
then echo "Current kernel main version is 3"
else echo "Current kernel main version is not 3"
fi
if [ `uname -srm | cut -d . -f 2` -gt 10 ]
then echo "Current kernel minor version is more than 10"
else echo "Current kernel minor version is less than 10"
fi
[root@localhost ex01]# chmod 755 3.sh
测试:
4.判断vsftpd软件包是否安装,如果没有则自动安装
编辑配置:
[root@localhost ex01]# vim 4.sh
#!/bin/bash
if rpm -qa | grep vsftpd > /dev/null
then echo "vsftpd already install!"
else `yum install vsftpd -y`
fi
[root@localhost ex01]#chmod 755 4.sh
测试:
5、判断httpd是否运行
编辑配置:
[root@localhost ex01]# vim 5.sh
#!/bin/bash
if [ "`systemctl is-active httpd`" == "active" ]
then echo "httpd service is start"
else echo "httpd service is no start"
fi
[root@localhost ex01]# chmod 755 5.sh
测试:
6、判断指定的主机是否能ping通,必须使用$1变量
编辑配置:
[root@localhost ex01]# vim 6.sh
#!/bin/bash
if ping -c 5 $1 > /dev/null
then echo "the ip $1 is ok!"
else
echo "the ip $1 is bad!"
fi
[root@localhost ex01]# chmod 755 6.sh
测试:
7、报警脚本,要求如下: 根分区剩余空间小于20% 内存已用空间大于80% 向用户alice发送告警邮件 配合crond每5分钟检查一次 [root@locaklhost ~]# echo “邮件正文” | mail -s “邮件主题” alice
①添加用户alice
[root@localhost ~]# useradd alice
[root@localhost ~]# id alice
uid=1001(alice) gid=1001(alice) groups=1001(alice)
②先测试一下cut切割根分区已用空间的百分比
切割内存使用情况
③编辑配置:
[root@localhost ex01]# vim 7.sh
#!/bin/bash
disk=`df -h | grep -w / | tr -s " " |cut -d " " -f 5 | cut -d % -f -1 `
mem_used=`free -m | grep -i mem | awk '{print $3}'`
mem_total=`free -m | grep -i mem | awk '{print $2}'`
mem=` echo $mem_used*100/$mem_total | bc`
if [ "$disk" -gt 80 -o "$mem" -gt 80 ];then
echo "disk used $disk%,memory used $mem%" | mail -s "mem and disk warning" alice
fi
[root@localhost ex01]#chmod 755 7.sh
④编辑/etc/crontab,使之每5分钟检查一次
*/5 * * * * root /shell/ex01/7.sh &> /dev/null
⑤安装mail服务包
yun install postfix -y
⑥测试:
因为我的根分区使用了21%,所以为了看到效果,将“ 根分区剩余空间小于20% ”改为“ 根分区剩余空间小于90%”
[root@localhost ex01]# vim 7.sh
#!/bin/bash
disk=`df -h | grep -w / | tr -s " " |cut -d " " -f 5 | cut -d % -f -1 `
mem_used=`free -m | grep -i mem | awk '{print $3}'`
mem_total=`free -m | grep -i mem | awk '{print $2}'`
mem=` echo $mem_used*100/$mem_total | bc`
if [ "$disk" -gt 10 -o "$mem" -gt 80 ];then //仅改变了根分区的判断数值
echo "disk used $disk%,memory used $mem%" | mail -s "mem and disk warning" alice
fi
切到alice用户查看效果
8、判断用户输入的是否是数字,如果是数字判断该数字是否大于10
编辑配置:
[root@localhost ex01]# vim 8.sh
#!/bin/bash
read -p "please enter a number:" num
if expr $num + 1 &> /dev/null;then
if [ $num -gt 10 ]
then echo "The number is integer and is more 10!"
else echo "The number is iteger!"
fi
else echo "The number is not iteger!"
fi
[root@localhost ex01]#chmod 755 8.sh
测试:
9、计算用户输入的任意两个整数的和、差、乘积、商、余数, 判断用户输入的参数是否是两个,如果不是,提示用法; 判断用户输入的是否是整数,如果不是,则给出提示终止运行。
编辑配置:
[root@localhost ex01]# vim 9.sh
#!/bin/bash
num1=$1
num2=$2
if [ "$#" -eq 2 ];then
if expr $num1 + $num2 &> /dev/null;then
echo $num1+$num2=$(($num1+$num2))
echo $num1+$num2=$(($num1-$num2))
echo $num1*$num2=$(($num1*$num2))
echo $num1/$num2=$(($num1/$num2))
echo $num1%$num2=$(($num1%$num2))
else
echo "your number is not integer!";exit 1
fi
else
echo "your number is not enough!"
fi
[root@localhost ex01]#chmod 755 9.sh
测试: