当前位置:网站首页>Shell语句判断练习题
Shell语句判断练习题
2022-07-27 05:22:00 【征服bug】
一、条件测试操作
1、文件测试
(1)测试目录/media是否存在,$?返回值为0,表示存在此目录,为其他数字为不存在
[ -d /media]
echo $?
#此目录存在则输出YES
[ -d /media] && echo "yes"2、整数值比较
(1)判断当前已登录的用户数,当超过5个时输出“too many”。
USER_SUM=$(who | wc -l)
[ $USER_SUM -gt 5 ] && echo "too many"(2)判断当前可用的空闲内存(buffers/cache)大小,当低于2048MB输出具体数值。
#提取第四列为剩余的内存空间
FREE=$(free -m | grep "Mem" | awk '{print $4}')
[ $FREE -lt 2048 ] && echo ${FREE}MB
3、字符串比较
(1)用户输入“yes”或“no”来确认强制删除任务
1.创建文件rm.sh
vim rm.sh2.编写代码
#!/bin/bash
IF="" #初始化
read -p "你要在此目录下删除的文件名:" dev
[ -e "$dev" ] && read -p "是否强制删除${dev}文件:" IF || echo "此文件不存在!"
[ "$IF" = "yes" ] && $(rm -f $dev) && echo "以强制删除${dev}文件!"
[ "$IF" = "no" ] && echo "以取消删除${dev}文件!"
3.赋予执行权限
chmod +x rm.sh4、逻辑测试
判断当前linux系统的内核版本是否大于2.4。
A=$(uname -r | awk -F. '{print $1}')
[ "$A" > 2.4 ] && echo "大于2.4版本"
二、if条件语句
1、单分支if语句(参考书上112页的两个案例)
(1)判断挂载点目录,若不存在则自动创建
vim chkmountdir.sh
#!/bin/bash
mount_dir="/media/cdrom/"
if [ ! -d $mount_dir ]
then
mkdir -p $mount_dir
fi
#赋予权限执行
chmod +x chkmountdir.sh
./chkmountdir.sh(2)判断当前用户是否为root,如果不是则报错并执行“exit 1”退出脚本,不再执行其他代码。
vim chkifroot.sh
#!/bin/bash
if [ "$USER" != "root" ]
then
echo "错误:非root用户,权限不足!"
exit 1
fi
fdisk -l /dev/sda
#赋予权限执行
chmod +x chkifroot.sh
./chkifroot.sh2、双分支if语句(参考书上113和114页的两个案例)
(1)判断目标主机是否存活,显示检测结果
vim pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "host $1 is up."
else
echo "host $1 is down."
fi
#赋予权限执行
chmod +x pinghost.sh
./pinghost.sh(2)检查vsftpd服务是否运行,若运行则列出监听地址,PID号;否则输出提示“警告,vsftpd服务不可用”。(插入linux系统安装光盘,安装一下vsftpd软件包)
vim chkvsftpd.sh
#!/bin/bash
systemctl status vsftpd &> /dev/null
if [ $? -eq 0 ]
then
echo "监听地址:$(netstat -anpt | grep vsftpd | awk '{print $4}')"
echo "进程PID号:$(pgrep -x vsftpd)"
else
echo "警告:vsftpd服务不可用!"
fi
#赋予权限执行
chmod +x chkvsftpd.sh
./chkvsftpd.sh3、多分支if语句(参考书上115页的案例)
(1)根据输入的考试分数不同来区分优秀,合格,不合格三挡。
vim gradediv.sh
#!/bin/bash
read -p "请输入你的分数(0-100)": GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE分,优秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE分,合格"
else
echo "$GRADE分,不合格"
fi
#赋予权限执行
chmod +x gradediv.sh
./gradediv.sh三、编写系统监控脚本
实验要求如下
- 使用df命令提取出根分区的磁盘占用率,赋值给变量DUG
- 使用mpstat命令提取CPU使用率(需安装sysstat软件包),赋值给变量CUG。
- 使用free命令提取出内存使用率,赋值给变量MUG。
- 使用ps命令统计进程数,赋值给变量PUG
- 使用who命令统计登录的用户数,赋值给UUG
- 判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件。
- 判断/tmp/alert.txt文件是否存在,若存在则作为告警邮件发送。
vim sysmon.sh
#!/bin/bash
# 提取性能监控指标(磁盘占用、CPU使用、内存使用)
DUG=$(df -hT | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')
CUG=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
MUG=$(expr $(free | grep "Mem" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}'))
PUG=$(ps aux|wc -l)
UUG=$(who|wc -l)
# 设置告警日志文件、告警邮箱
ALOG="/tmp/alert.txt"
AMAIL="root "
# 判断是否记录告警
if [ $DUG -gt 90 ]
then
echo "磁盘占用率:$DUG %" >> $ALOG
fi
if [ $CUG -gt 80 ]
then
echo "CPU使用率:$CUG %" >> $ALOG
fi
if [ $MUG -gt 90 ]
then
echo "内存使用率:$MUG %" >> $ALOG
fi
if [ $PUG -gt 200 ]
then
echo “启动的进程超过了200,太多了” >>$ALOG
fi
if [ $UUG -gt 5 ]
then
echo “登录的用户超过5个了,太多了” >>$ALOG
fi
# 判断是否发送告警,将告警信息显示在屏幕上,最后删除告警日志文件
if [ -f $ALOG ]
then
cat $ALOG | mail -s "Host Alert" $AMAIL
rm -rf $ALOG
fi
测试:
如果达不到指定数值可以根据自己的电脑来改参数
chmod +x /sysmon.sh
./sysmon.sh
mail
输入要查看的编号默认1
q:退出
如果没有邮件,说明脚本没有达到指定数值,把数值调小,再查看邮箱设置crontab计划任务
(1)确认系统服务crond已经运行。
systemctl status crondcrond (pid 5839) 正在运行...
(2)添加crontab计划任务配置,每半小时调用一次sysmon.sh脚本程序。
crontab -e
*/30 * * * * /root/sysmon.sh边栏推荐
- Wireshark packet modification -- adding or modifying message fields (2)
- ROS node name duplicate
- TF coordinate transformation
- Unity practical tips (updating)
- IP core summary
- Using markdowm
- Programming learning record -- recursively solving the tower of Hanoi problem
- DNS domain name resolution service
- Automated Deployment Project
- Wireshark function introduction
猜你喜欢
随机推荐
Unityshader depth texture (understanding and problems encountered)
Programming learning record -- recursively solving the tower of Hanoi problem
regular expression
C language - dynamic memory management
Shell programming specifications and variables
源码编译安装LAMP和DISCUZ论坛
Unity practical tips (updating)
bug分类及缺陷和csv文件测试
If conditional statement of shell
iptables防火墙及SNAT和DNAT
Database commands
gradle的安装配置及使用
Wireshark function introduction
Allow or prohibit connecting to a non domain and a domain network at the same time
多线程CAS、synchronized锁原理 、JUC以及死锁
Brief introduction to unity window interface
Learning the operation environment needs to be equipped during software testing
数据库在终端的基础操作
数据库命令
5G网络身份识别---详解5G-GUTI









