登录检查脚本
- 提高兼容性(适应不同Linux发行版)
- 增强可视化效果和可读性
- 增加关键资源警戒提示
- 优化表格对齐和颜色使用
- 添加系统安全状态检查
#!/bin/bash# 改进版系统登录提示脚本
# 优化点:兼容性增强、资源警戒提示、表格美化、安全状态检查# 颜色定义
RED="\033[1;31m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
BLUE="\033[1;34m"
CYAN="\033[1;36m"
MAGENTA="\033[1;35m"
RESET="\033[0m"# 获取系统基本信息
HOSTNAME=$(hostname -f 2>/dev/null || hostname)
UPTIME=$(uptime -p | sed 's/up //;s/minutes/min/;s/hours/hr/')
OS_NAME=$(grep -E '^PRETTY_NAME' /etc/os-release | cut -d '"' -f2)# 兼容性更强的IP获取
IP_ADDR=$(ip route get 1 2>/dev/null | awk '{for(i=1;i<=NF;i++)if($i=="src")print $(i+1)}')
[ -z "$IP_ADDR" ] && IP_ADDR=$(hostname -I | awk '{print $1}')# 内存获取 (兼容 free 不同版本)
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEM_USED=$(free -m | awk '/Mem:/ {print $3}')
MEM_AVAIL=$(free -m | awk '/Mem:/ {print $7}')
MEM_PCT=$((MEM_USED * 100 / (MEM_TOTAL ? MEM_TOTAL : 1)))# CPU使用率获取 (更精确的方法)
CPU_USAGE=$(top -bn2 | grep "Cpu(s)" | tail -1 | \awk -F',' '{gsub("%","",$4);print 100 - $4}' | \awk '{printf "%.0f", $1}'
)# 负载信息
LOADAVG=$(awk '{print $1,$2,$3}' /proc/loadavg)
CPU_CORES=$(grep -c processor /proc/cpuinfo)# 警戒级别计算函数
warn_level() {local value=$1if [[ $value -ge 90 ]]; then echo "${RED}危险!${RESET}"; elif [[ $value -ge 75 ]]; then echo "${YELLOW}警告!${RESET}";else echo "${GREEN}正常${RESET}"; fi
}# 输出系统信息
echo -e "\n${BLUE}===> 恭喜登录 ${MAGENTA}$HOSTNAME${BLUE} ($OS_NAME) <===${RESET}\n"# 关键资源表格
echo -e "${YELLOW}▂▂▂▂▂▂▂▂▂▂▂▂ 核心资源状态 ▂▂▂▂▂▂▂▂▂▂▂▂${RESET}"
printf "${CYAN}| %-10s | %-12s | %-7s | %-10s |${RESET}\n" "资源类型" "使用情况" "使用率" "状态"
echo -e "${YELLOW}├────────────┼──────────────┼─────────┼────────────┤${RESET}"# CPU信息行
printf "| %-10s | %-12s | ${YELLOW}%5s%%${RESET} | %-10s |\n" \"CPU" "${LOADAVG} (${CPU_CORES}核)" "$CPU_USAGE" "$(warn_level $CPU_USAGE)"# 内存信息行
printf "| %-10s | %-12s | ${YELLOW}%5s%%${RESET} | %-10s |\n" \"内存" "${MEM_USED}MB/${MEM_TOTAL}MB" "$MEM_PCT" "$(warn_level $MEM_PCT)"# 网络信息行
printf "| %-10s | %-12s | %-9s | ${GREEN}%-10s${RESET} |\n" "网络" "$IP_ADDR" " - " "在线"# 运行时长行
printf "| %-10s | %-12s | %-9s | ${CYAN}%-10s${RESET} |\n" "运行时长" "$UPTIME" " - " " - "
echo -e "${YELLOW}└────────────┴──────────────┴─────────┴────────────┘${RESET}"# 磁盘信息表格
echo -e "\n${YELLOW}▂▂▂▂▂▂▂▂▂▂▂▂ 磁盘使用情况 ▂▂▂▂▂▂▂▂▂▂▂▂${RESET}"
printf "${CYAN}| %-16s | %-8s | %-8s | %-7s | %-10s |${RESET}\n" \"挂载点" "已用" "总共" "使用率" "状态"
echo -e "${YELLOW}├──────────────────┼──────────┼──────────┼─────────┼────────────┤${RESET}"# 处理磁盘信息
df -h -x tmpfs -x devtmpfs | awk 'NR>1 {usage = substr($5, 1, length($5)-1);status = (usage > 90) ? "'"${RED}"'危险!'"${RESET}"'" : (usage > 75) ? "'"${YELLOW}"'警告'"${RESET}"'" : "'"${GREEN}"'正常'"${RESET}"'";printf "| %-16s | %-8s | %-8s | %-7s | %-10s |\n", $6, $3, $2, $5, status
}'echo -e "${YELLOW}└──────────────────┴──────────┴──────────┴─────────┴────────────┘${RESET}"# 安全检查提示
echo -e "\n${YELLOW}▂▂▂▂▂▂▂▂▂▂▂▂ 安全提示 ▂▂▂▂▂▂▂▂▂▂▂▂${RESET}"
echo -e "${MAGENTA}最近登录用户:${RESET}"
last -5 -i | head -n -2 | awk '{printf " %s %s %-16s %s %s %s\n", $1, $2, $3, $4, $5, $6
}'
echo -e "\n${MAGENTA}重要提示:${RESET}"
echo -e " - ${RED}root${RESET} 用户最后登录: $(last -i root | head -1 | awk '{print $4,$5,$6,$7}')"
echo -e " - 当前有 ${RED}$(who | wc -l)${RESET} 个活跃用户"# 结束语
echo -e "\n${GREEN}系统准备就绪! ${RESET}操作需谨慎, ${RED}勿当背锅侠!${RESET}"
echo -e "${BLUE}关键提示:${RESET} 执行 ${CYAN}sudo -l${RESET} 查看您的权限, ${CYAN}history${RESET} 查看操作记录\n"
主要优化点说明:
- 兼容性增强:
- 改进了IP获取方式,适用于不同Linux发行版
- 优化内存获取方法避免除零错误
- 适配不同版本的free命令输出格式
- 可视化增强:
- 使用Unicode线条绘制更美观的表格边框
- 关键资源添加彩色状态标记(正常/警告/危险)
- 优化颜色使用,不同资源类型使用不同颜色
- 资源警戒提示:
- 添加CPU、内存、磁盘使用率的三级警告机制
- 危险资源自动标红显示
- 内存信息增加"可用内存"字段
- 安全增强:
- 显示最近登录用户列表
- 提示root用户最后登录时间
- 显示当前活跃用户数量
- 结束时提示查看权限和操作历史
- 结构优化:
- 使用函数封装重复逻辑(如警戒级别判断)
- 更清晰的区域分割(核心资源/磁盘/安全)
- 添加操作系统类型信息显示
这个优化版本在实际服务器环境使用时,会在用户登录后显示清晰的资源状态和安全提示,帮助运维人员快速了解系统状况。