当前位置:网站首页>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边栏推荐
- Linear progression for face recognition
- Remote sensing image recognition misclassification under multi class recognition
- Three ways to get RPM packages using yum
- C language - file operation
- DHCP原理与配置
- shell之if条件语句
- 兼容性测试知识点
- Programming learning records - Lesson 4 [branch and loop statements]
- Communication mechanism cases
- Automated Deployment Project
猜你喜欢
随机推荐
Automatic tracking
OSG environment construction (win10+vs2019)
shell脚本之函数调用
PLL of IP core
英语基础知识:非谓语使用规则上篇
关于testng相关标签的使用
IP core summary
数据库命令
gradle的安装配置及使用
Reading and writing of file content - data flow
Unit integration (grounding) test
Strategies for common locks in multithreading
Install Wireshark correctly
源码编译安装LAMP和DISCUZ论坛
Introduction to hash table
Remote sensing image recognition training strategy
Ulcl function --5gc
Learning records of programming -- Lesson 2 [first knowledge of C language]
英语基础知识:定语使用规则下篇
Non photorealistic rendering (NPR) paper understanding and reproduction (unity) - stylized highlights for cartoon rendering and animation









