本文目录导读:

我来给你一个完善的逐项检测运行环境的Shell脚本模板,包含常见的检测项目:
完整的环境检测脚本
#!/bin/bash
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 计数器
PASS_COUNT=0
FAIL_COUNT=0
WARN_COUNT=0
print_header() {
echo -e "\n${BLUE}========================================${NC}"
echo -e "${BLUE} 环境检测报告 - $(date '+%Y-%m-%d %H:%M:%S')${NC}"
echo -e "${BLUE}========================================${NC}\n"
}
# 检查命令是否存在
check_command() {
local cmd=$1
local name=$2
echo -n "检测 ${name:-$cmd}... "
if command -v $cmd &> /dev/null; then
echo -e "${GREEN}[✓] 已安装${NC}"
((PASS_COUNT++))
return 0
else
echo -e "${RED}[✗] 未安装${NC}"
((FAIL_COUNT++))
return 1
fi
}
# 检查版本
check_version() {
local cmd=$1
local version_flag=$2
local name=$3
echo -n "检测 ${name:-$cmd} 版本... "
if $cmd $version_flag 2>/dev/null; then
echo -e "${GREEN}[✓] 版本检查通过${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 版本检查失败${NC}"
((WARN_COUNT++))
fi
}
# 检查端口
check_port() {
local port=$1
local name=$2
echo -n "检测端口 ${port} (${name})... "
if ss -tlnp | grep -q ":$port " || netstat -tlnp 2>/dev/null | grep -q ":$port "; then
echo -e "${YELLOW}[!] 端口已被占用${NC}"
((WARN_COUNT++))
else
echo -e "${GREEN}[✓] 端口可用${NC}"
((PASS_COUNT++))
fi
}
# 检查磁盘空间
check_disk() {
local threshold=${1:-80}
echo -n "检测磁盘使用率(阈值: ${threshold}%)... "
local usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -gt "$threshold" ]; then
echo -e "${RED}[✗] 磁盘使用率 ${usage}% > ${threshold}%${NC}"
((FAIL_COUNT++))
else
echo -e "${GREEN}[✓] 磁盘使用率 ${usage}%${NC}"
((PASS_COUNT++))
fi
}
# 检查系统资源
check_system_resources() {
echo -e "\n${BLUE}--- 系统资源检查 ---${NC}"
# CPU 负载
echo -n "检测 CPU 负载... "
local load=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)
if [ $(echo "$load > 2" | bc 2>/dev/null) -eq 1 ]; then
echo -e "${YELLOW}[!] CPU 负载较高: ${load}${NC}"
((WARN_COUNT++))
else
echo -e "${GREEN}[✓] CPU 负载正常: ${load}${NC}"
((PASS_COUNT++))
fi
# 内存使用
echo -n "检测内存使用... "
local mem_total=$(free -m | awk 'NR==2 {print $2}')
local mem_used=$(free -m | awk 'NR==2 {print $3}')
local mem_percent=$((mem_used * 100 / mem_total))
if [ "$mem_percent" -gt 90 ]; then
echo -e "${RED}[✗] 内存使用率 ${mem_percent}%${NC}"
((FAIL_COUNT++))
else
echo -e "${GREEN}[✓] 内存使用率 ${mem_percent}%${NC}"
((PASS_COUNT++))
fi
}
# 检查各项依赖
check_dependencies() {
echo -e "\n${BLUE}--- 基础命令检查 ---${NC}"
local commands=(
"curl:curl"
"wget:wget"
"git:git"
"python3:Python3"
"node:Node.js"
"npm:Node Package Manager"
"docker:Docker"
"docker-compose:Docker Compose"
"nginx:Nginx"
"mysql:MySQL"
"redis-cli:Redis"
"java:Java"
"mvn:Maven"
"gcc:GCC"
"make:Make"
)
for cmd_pair in "${commands[@]}"; do
IFS=':' read -r cmd name <<< "$cmd_pair"
check_command "$cmd" "$name"
done
}
# 检查网络连接
check_network() {
echo -e "\n${BLUE}--- 网络连接检查 ---${NC}"
local targets=(
"baidu.com:百度"
"google.com:谷歌"
"github.com:GitHub"
"docker.com:Docker Hub"
)
for target in "${targets[@]}"; do
IFS=':' read -r host name <<< "$target"
echo -n "检测 ${name} 连接... "
if curl -s --connect-timeout 5 "$host" > /dev/null 2>&1; then
echo -e "${GREEN}[✓] 可达${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 不可达${NC}"
((WARN_COUNT++))
fi
done
}
# 检查配置文件
check_configs() {
echo -e "\n${BLUE}--- 配置文件检查 ---${NC}"
local configs=(
"/etc/nginx/nginx.conf:Nginx配置"
"/etc/ssh/sshd_config:SSH配置"
"/etc/hosts:Hosts文件"
"/etc/resolv.conf:DNS配置"
)
for config in "${configs[@]}"; do
IFS=':' read -r path name <<< "$config"
echo -n "检测 ${name} ($path)... "
if [ -f "$path" ]; then
echo -e "${GREEN}[✓] 存在${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 不存在${NC}"
((WARN_COUNT++))
fi
done
}
# 检查环境变量
check_env_vars() {
echo -e "\n${BLUE}--- 环境变量检查 ---${NC}"
local env_vars=(
"JAVA_HOME:Java Home"
"M2_HOME:Maven Home"
"NODE_HOME:Node Home"
"DOCKER_HOST:Docker Host"
)
for env_var in "${env_vars[@]}"; do
IFS=':' read -r var name <<< "$env_var"
echo -n "检测 ${name} ($var)... "
if [ -n "${!var}" ]; then
echo -e "${GREEN}[✓] 已设置: ${!var}${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 未设置${NC}"
((WARN_COUNT++))
fi
done
}
# 检查系统服务
check_services() {
echo -e "\n${BLUE}--- 系统服务检查 ---${NC}"
local services=(
"sshd:SSH服务"
"docker:Docker服务"
"nginx:Nginx服务"
"mysqld:MySQL服务"
)
for service in "${services[@]}"; do
IFS=':' read -r svc name <<< "$service"
echo -n "检测 ${name}... "
if systemctl is-active --quiet "$svc" 2>/dev/null; then
echo -e "${GREEN}[✓] 运行中${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 未运行${NC}"
((WARN_COUNT++))
fi
done
}
# 检查安全设置
check_security() {
echo -e "\n${BLUE}--- 安全检查 ---${NC}"
# 检查防火墙状态
echo -n "检测防火墙状态... "
if ufw status 2>/dev/null | grep -q "active"; then
echo -e "${GREEN}[✓] 防火墙已启用${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 防火墙未启用${NC}"
((WARN_COUNT++))
fi
# 检查 SELinux
echo -n "检测 SELinux... "
if getenforce 2>/dev/null | grep -q "Enforcing"; then
echo -e "${GREEN}[✓] SELinux 已启用${NC}"
((PASS_COUNT++))
elif getenforce 2>/dev/null | grep -q "Permissive"; then
echo -e "${YELLOW}[!] SELinux 非强制模式${NC}"
((WARN_COUNT++))
else
echo -e "${YELLOW}[!] SELinux 未安装${NC}"
((WARN_COUNT++))
fi
# 检查 SSH 配置安全
echo -n "检测 SSH 根登录... "
if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config 2>/dev/null; then
echo -e "${GREEN}[✓] 已禁止根登录${NC}"
((PASS_COUNT++))
else
echo -e "${YELLOW}[!] 允许根登录${NC}"
((WARN_COUNT++))
fi
}
# 打印总结
print_summary() {
echo -e "\n${BLUE}========================================${NC}"
echo -e "${BLUE} 检测总结${NC}"
echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}通过: ${PASS_COUNT}${NC}"
echo -e "${YELLOW}警告: ${WARN_COUNT}${NC}"
echo -e "${RED}失败: ${FAIL_COUNT}${NC}"
echo -e "${BLUE}总分: $((PASS_COUNT + WARN_COUNT + FAIL_COUNT))${NC}"
if [ $FAIL_COUNT -eq 0 ]; then
echo -e "\n${GREEN}所有检测通过✓${NC}"
else
echo -e "\n${RED}存在 $FAIL_COUNT 项未通过检测✗${NC}"
fi
}
# 生成JSON报告(可选)
generate_json_report() {
local report_file="environment_report_$(date '+%Y%m%d_%H%M%S').json"
cat > "$report_file" << EOF
{
"report_time": "$(date '+%Y-%m-%d %H:%M:%S')",
"hostname": "$(hostname)",
"os": "$(uname -a)",
"results": {
"passed": $PASS_COUNT,
"warnings": $WARN_COUNT,
"failed": $FAIL_COUNT
},
"checks": []
}
EOF
echo -e "\n${BLUE}JSON报告已生成: $report_file${NC}"
}
# 主函数
main() {
print_header
# 检查系统资源
check_system_resources
# 检查基础命令
check_dependencies
# 检查网络
check_network
# 检查配置文件
check_configs
# 检查环境变量
check_env_vars
# 检查服务
check_services
# 检查安全
check_security
# 检查端口(示例)
echo -e "\n${BLUE}--- 端口检查 ---${NC}"
check_port 80 "HTTP"
check_port 443 "HTTPS"
check_port 3306 "MySQL"
check_port 6379 "Redis"
# 检查磁盘
echo -e "\n${BLUE}--- 磁盘检查 ---${NC}"
check_disk 80
# 打印总结
print_summary
# 可选:生成报告
# generate_json_report
# 返回状态码
exit $FAIL_COUNT
}
# 执行主函数
main
使用方法
-
保存为文件
vim check_env.sh
-
添加执行权限
chmod +x check_env.sh
-
运行脚本
./check_env.sh
-
或直接下载运行
curl -sL https://your-server/check_env.sh | bash
自定义功能
添加自定义检查
# 在check_dependencies函数中添加
check_command "kubectl" "Kubernetes"
# 或在main函数中添加
echo -n "检测自定义服务... "
# 你的检测逻辑
if [ condition ]; then
echo -e "${GREEN}[✓] 通过${NC}"
else
echo -e "${RED}[✗] 失败${NC}"
fi
添加超时控制
# 在检测网络时添加超时 timeout 5 curl -s http://example.com
这个脚本模块化、可扩展,你可以根据项目需求添加或删除检测项。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播