当前位置: 首页 > ops >正文

shell脚本拔高习题

1. 磁盘监控告警

需求:

编写一个Shell脚本,监控系统的磁盘空间,并在磁盘使用超过80%时发送警告邮件。

思路:

  1. 使用df命令获取磁盘空间使用情况。

  2. 提取磁盘的使用率信息。

  3. 判断磁盘的使用率是否超过80%。

  4. 如果超过80%,则使用echo弹出提示信息

#!/bin/bash
# 磁盘告警
# 编写一个shell脚本,监控系统的磁盘空间,并在磁盘使用超过80%时发送告警邮件
### 思路:

# 1. 使用`df`命令获取磁盘空间使用情况。
# 2. 提取磁盘的使用率信息。
# 3. 判断磁盘的使用率是否超过80%。
# 4. 如果超过80%,则使用echo弹出提示信息
# 定义一个阈值
dev=20
# 获取磁盘使用情况
dev_condition=$(df / | grep "^/dev/" | tr -s ' ' | cut -d  ' ' -f5 | tr -d '%')
# 判断
if [ $dev_condition -gt $dev ] ; then
   echo "磁盘使用率过高"
fi

2. cpu负载监控

需求:

编写一个Shell脚本,监控系统的CPU负载,并在负载过高时发送警告。

思路:

  1. 使用uptime命令获取系统的负载信息。

  2. 提取1分钟、5分钟、15分钟的负载信息。

  3. 如果负载超过设定阈值(例如:4.0),则弹出告警信息

#!/bin/bash
## 2. cpu负载监控
### 需求:
# 编写一个Shell脚本,监控系统的CPU负载,并在负载过高时发送警告。
### 思路:
# 1. 使用`uptime`命令获取系统的负载信息。
# 2. 提取1分钟、5分钟、15分钟的负载信息。
# 3. 如果负载超过设定阈值(例如:4.0),则弹出告警信息
# cpu负载信息
cpu=&(uptime | tr -s ' ' | cut -d ' ' -f9 | tr -d ',')
# 阈值
threshold=4.0
if (( $(echo "$cpu > $threshold" | bc -l) ));then
   echo "cpu负载过高,超过了阈值$threshold"
fi

3. 日志文件清理

需求:

编写一个Shell脚本,定期清理系统日志文件。

思路:

  1. 使用find命令查找/var/log目录下超过30天的日志文件。

  2. 删除这些过期日志文件。

#!/bin/bash
# 3. 日志文件清理
# 需求:
# 编写一个Shell脚本,定期清理系统日志文件。
# 思路:
# 1. 使用`find`命令查找`/var/log`目录下超过30天的日志文件。
# 2. 删除这些过期日志文件。

find /var/log -type f -name '*.log' -mtime '+30' -delete

4. 服务状态检查脚本

需求:

编写一个Shell脚本,检查指定服务(如nginx)的状态,并在服务未启动时重启它。

思路:

  1. 使用systemctl检查服务状态。

  2. 如果服务停止,使用systemctl start启动服务。

  3. 记录操作结果。

#!/bin/bash
# 4. 服务状态检查脚本
# 需求:
# 编写一个Shell脚本,检查指定服务(如`nginx`)的状态,并在服务未启动时重启它。
# 思路:
# 1. 使用`systemctl`检查服务状态。
# 2. 如果服务停止,使用`systemctl start`启动服务。
# 3. 记录操作结果
# 服务状态
check_nginx=$(systemctl is-active nginx)
# 判断
if [ $check_nginx = "inactive" ];then
   systemctl start nginx
   echo "nginx状态为$check_nginx,已启动"
else
   echo "nginx已启动"
fi

5. 网络端口监控脚本

需求:

编写一个Shell脚本,检查系统中指定端口的监听情况,并在端口未开放时发送警告。

思路:

  1. 使用netstatss命令检查端口(如80、443、22等)的监听状态。

  2. 如果指定端口未开放,则弹出提示

#!/bin/bash
# 5. 网络端口监控脚本
# 需求:
# 编写一个Shell脚本,检查系统中指定端口的监听情况,并在端口未开放时发送警告。
# 思路:
# 1. 使用`netstat`或`ss`命令检查端口(如80、443、22等)的监听状态。
# 2. 如果指定端口未开放,则弹出提示

port_state=$(ss -tuln | grep ':80')
if [ $? -eq 0 ];then
   echo "端口已经开放"
else
   echo "端口:80未开放"
fi

6. 检查文件是否存在

需求:

编写一个Shell脚本,检查指定的文件/etc/nginx/nginx.conf是否存在。如果存在,输出“文件存在”,否则输出“文件不存在”。

思路:

  1. 使用-f选项判断文件是否存在。

#!/bin/bash
# 6. 检查文件是否存在
# 需求:
# 编写一个Shell脚本,检查指定的文件/etc/nginx/nginx.conf是否存在。
# 如果存在,输出“文件存在”,否则输出“文件不存在”。

file_exist=$(tail -10 /etc/nginx/nginx.conf)
if [ $? -eq 0 ];then
   echo  "文件存在"
else
   echo "文件不存在"
fi

7. 计算两个数的和

需求:

编写一个Shell脚本,接受两个整数作为输入,计算它们的和并输出。

思路:

  1. 使用read命令读取用户输入。

  2. 使用expr命令或$(( ))进行加法计算。

#!/bin/bash
# 7. 计算两个数的和
# 需求:
# 编写一个Shell脚本,接受两个整数作为输入,计算它们的和并输出。
# 思路:
# 1. 使用`read`命令读取用户输入。
# 2. 使用`expr`命令或`$(( ))`进行加法计算。
sum=0
read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b
sum=$(expr $a + $b)
echo "两个数的和为:$sum"

8. 输出1到100之间的偶数

需求:

编写一个Shell脚本,输出1到100之间的所有偶数。

思路:

  1. 使用for循环遍历1到100。

  2. 使用if语句检查是否为偶数。

#!/bin/bash
# 8. **输出1到100之间的偶数**
# 需求:
# 编写一个Shell脚本,输出1到100之间的所有偶数。
# 思路:
# 1. 使用`for`循环遍历1到100。
# 2. 使用`if`语句检查是否为偶数。
sum=0
for i in {1..100}
do
   if [ $((i%2)) -eq 0 ] ;then
       echo $i
       #  求偶数和
       # sum=$((sum+i))
       # echo "偶数和:$sum"
   fi
done

9. 在指定目录中查找文件并输出文件名

需求:

编写一个Shell脚本,查找指定目录下的所有文件,并输出其文件名。

思路:

  1. 使用find命令查找文件。

  2. 使用for循环输出每个文件的名称。

#!/bin/bash
# 9.在指定目录中查找文件并输出文件名
# 需求:
# 编写一个Shell脚本,查找指定目录下的所有文件,并输出其文件名。
# 思路:
# 1. 使用`find`命令查找文件。
# 2. 使用`for`循环输出每个文件的名称。

# 提示用户输入目录路径
echo "请输入目录路径:"
read dir

# 查找目录下的所有文件并输出文件名
for file in $(find "$dir" -type f); do
   echo "$file"
done

10. 检查服务状态并输出警告

需求:

编写一个Shell脚本,定义一个函数来检查某个服务的状态。如果服务未启动,输出警告信息。如果服务正常运行,输出服务的状态。

思路:

  1. 定义一个函数check_service_status,用于检查一个指定服务的状态。

  2. 函数使用systemctl命令检查服务是否运行,并返回结果。

  3. 主程序中直接调用该函数来检查服务状态。

#!/bin/bash
# 10. 检查服务状态并输出警告
# 需求:
# 编写一个Shell脚本,定义一个函数来检查某个服务的状态。如果服务未启动,输出警告信息。如果服务正常运行,输出服务的状态。
# 思路:
# 1. 定义一个函数`check_service_status`,用于检查一个指定服务的状态。
# 2. 函数使用`systemctl`命令检查服务是否运行,并返回结果。
# 3. 主程序中直接调用该函数来检查服务状态。
check_service_status(){
   service_name=$1 # 获取服务名称
   # 查看状态是否为运行状态
   systemctl is-active --quiet $service_name
   if [ $? -eq 0 ]; then
       echo "服务 $service_name 运行正常"
   else
       echo "警告,服务 $service_name 运行异常"
   fi
}
check_service_status nginx

http://www.xdnf.cn/news/13239.html

相关文章:

  • Word-- 制作论文三线表
  • SQL SERVER 数据库迁移的三种方法!
  • git clone 时报错超时的问题解决方案
  • 人工智能驱动的企业变革:从智能辅助到战略赋能
  • 【C#】C++的回调函数和C#的事件委托在某些方面有相似之处
  • 前端6月份之前的部分技术更新记录
  • mongDB
  • CentOS7.9 查询运维安全日志,排查恶意用户
  • 用C#实现单向链表和双向链表
  • 《滑动窗口》题集
  • 基于KubeSphere平台快速搭建单节点向量数据库Milvus
  • 【React-router-dom】浅拷贝,查询参数放到路由上
  • vue的这两个特性:数据驱动视图 与 双向数据绑定的区别
  • 工业环境的首选:试验台铁底板稳定性
  • 从设备监控到人员调度,可视化赋能车间全场景
  • 搭建一个springColud 项目,从头开始,里面有订单,库存两个模块
  • LangChain Chat History概念指南
  • 【ModelArts】ModelArts一站式AI开发平台详解(一)
  • 【WiFi扫描相关帧】
  • 条码二维码如何在数字医疗守护安全与效率?
  • 日志收集工具-logstash
  • Echarts大量数据柱图,禁止滑块拖动宽度,以及适配分辨率。
  • CentOS7下的Kafka集群安装部署
  • MongleDB数据库应用
  • 【Flash 芯片 MTD 专栏】Flash芯片识别异常导致mtd子系统分区创建失败
  • 如何判断一个bug,是前端还是后端的?
  • 工作记录:人物对话功能开发与集成
  • linux thermal framework(1)_概述
  • RAG文档解析难点2:excel数据“大海捞针”,超大Excel解析与精准行列查询指南
  • 如何定期检查和调整螺杆支撑座间隙?