MST
星途 面试题库

面试题:Bash条件语句与复杂逻辑结合

编写一个Bash脚本处理系统资源监控。如果CPU使用率超过80%且内存使用率超过70%,发送一封邮件(假设邮件发送命令为`sendmail`,收件人为admin@example.com)通知管理员,邮件内容包含当前CPU使用率和内存使用率。同时,如果磁盘空间剩余小于10GB,在邮件中也需提及磁盘剩余空间大小。要求脚本能够持续监控,每隔5分钟检查一次资源状态,并且代码具备良好的健壮性和错误处理机制。
12.6万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

while true; do
    # 获取CPU使用率
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
    # 获取内存使用率
    mem_usage=$(free -h | awk 'NR==2{printf "%.2f%%", ($3/$2)*100}')
    # 获取磁盘剩余空间
    disk_free=$(df -h / | awk 'NR==2{print $4}' | sed 's/G//')

    if (( $(echo "$cpu_usage > 80" | bc -l) && $(echo "$mem_usage > 70%" | bc -l) )); then
        message="CPU使用率: $cpu_usage%\n内存使用率: $mem_usage"
        if (( $(echo "$disk_free < 10" | bc -l) )); then
            message="$message\n磁盘剩余空间: $disk_free GB"
        fi
        echo -e $message | sendmail -v admin@example.com
    elif (( $(echo "$disk_free < 10" | bc -l) )); then
        message="磁盘剩余空间: $disk_free GB"
        echo -e $message | sendmail -v admin@example.com
    fi

    sleep 300 # 每隔5分钟检查一次
done

解释:

  1. while true 循环确保脚本持续运行。
  2. 使用 top -bn1 获取实时CPU使用率,free -h 获取内存使用率,df -h / 获取根分区的磁盘剩余空间。
  3. 通过 bc 进行数值比较,判断CPU和内存使用率是否超过阈值,以及磁盘剩余空间是否小于10GB。
  4. 构建邮件内容并通过 sendmail 发送邮件。
  5. sleep 300 使脚本每5分钟(300秒)执行一次检查。