Appearance
Shell 脚本案例汇总
本页整理了一些常见的 Shell 脚本案例,适合用于日常运维工作中的自动化处理任务。
案例一:Linux 系统巡检脚本
脚本用途:快速检查系统的基本信息、硬件资源、服务状态和安全配置。
脚本内容:
shell
#!/bin/bash
echo '系统巡检开启'
echo '---------------------- 1. 系统信息检查 ----------------------'
# 暂时修改语言和字符集
export LANG=en_US.UTF-8
# 主机名
zhuji_ming=$(cat /etc/hostname)
echo "主机名: $zhuji_ming"
# IP
benji_ip=$(hostname -I)
echo "IP 地址: $benji_ip"
# 系统发行版本
xitong_release=$(cat /etc/os-release | grep PRE | awk -F '"' '{ print $2 }')
echo "系统发行版本: $xitong_release"
# 系统具体版本
juti_neihe=$(cat /etc/os-release | grep -w VERSION | awk -F '"' '{ print $2 }')
echo "系统具体版本: $juti_neihe"
# 内核版本
kernel=$(uname -r)
echo "内核版本: $kernel"
# 系统语言和字符集
lang_zifuji=$(echo $LANG)
echo "系统语言和字符集: $lang_zifuji"
echo '---------------------- 2. 硬件信息检查 ----------------------'
# CPU架构
cpu_jiagou=$(uname -i)
echo "CPU架构: $cpu_jiagou"
# CPU版本
cpu_banben=$(cat /proc/cpuinfo | grep -w "model name" | sed -n '1p' | awk -F ':' '{ print $2 }' | xargs)
echo "CPU版本: $cpu_banben"
# CPU插槽数
cpu_socket=$(lscpu | grep Socket | awk -F: '{ print $2 }' | xargs)
echo "CPU插槽数: $cpu_socket"
# CPU核心数
cpu_hexin=$(lscpu | grep "CPU(s)" | sed -n 1p | awk -F: '{ print $2 }' | xargs)
echo "CPU核心数: $cpu_hexin"
echo '---------------------- 3. 内存与交换空间检查 ----------------------'
# 总内存
mem_zongti=$(cat /proc/meminfo | grep -w MemTotal | awk -F: '{ print $2 }' | xargs)
echo "总内存: $mem_zongti"
# 可用内存
mem_wanquankeyong=$(cat /proc/meminfo | grep -w MemAvailable | awk -F: '{ print $2 }' | xargs)
echo "可用内存: $mem_wanquankeyong"
# 已用内存
yiyong_neicun=$(free -h | grep Mem | awk '{ print $3 }')
echo "已用内存: $yiyong_neicun"
# SWAP空间
swap_daxiao=$(free -h | grep Swap | awk '{print $2}')
swap_shiyong=$(free -h | grep Swap | awk '{print $3}')
swap_shengyu=$(free -h | grep Swap | awk '{print $4}')
echo "SWAP大小: $swap_daxiao, 使用情况: $swap_shiyong, 剩余: $swap_shengyu"
echo '---------------------- 4. 磁盘检查 ----------------------'
# 磁盘个数
cipan_total=$(fdisk -l | egrep '^(\/dev\/sda|\/dev\/vda)' | wc -l)
echo "磁盘总数: $cipan_total"
# 磁盘大小
cipan_daxiao=$(fdisk -l | sed -n 1p | awk -F: '{ print $2 }')
echo "磁盘大小: $cipan_daxiao"
# 磁盘分区使用情况
cipan_fenqudaxiao=$(df -h | grep ' /$' | awk '{print "磁盘大小: " $2 ", 磁盘已用: " $3 ", 磁盘可以: " $4}')
echo "磁盘分区使用情况: $cipan_fenqudaxiao"
# 磁盘分区inode使用率
cipan_inode=$(df -ih | grep '/$' | awk '{ print $(NF-1) }')
echo "磁盘分区inode使用率: $cipan_inode"
echo '---------------------- 5. 负载与性能检查 ----------------------'
# 负载均衡1,5,15
one_load=$(uptime | awk -F 'load average: ' '{print $2}' | awk -F, '{print $1}' | xargs)
five_load=$(uptime | awk -F 'load average: ' '{print $2}' | awk -F, '{print $2}' | xargs)
onefive_load=$(uptime | awk -F 'load average: ' '{print $2}' | awk -F, '{print $3}' | xargs)
echo "负载均衡: 1分钟负载: $one_load, 5分钟负载: $five_load, 15分钟负载: $onefive_load"
echo '---------------------- 6. 用户与登录信息检查 ----------------------'
# 总用户数量
yonghu_total=$(cat /etc/passwd | wc -l)
echo "总用户数量: $yonghu_total"
# 可登录用户数量
kedenglu_total=$(cat /etc/passwd | grep /bin/bash | wc -l)
echo "可登录用户数量: $kedenglu_total"
# 虚拟用户数量
yonghu_xuni=$(cat /etc/passwd | egrep -v 'sh$' | wc -l)
echo "虚拟用户数量: $yonghu_xuni"
# 可登录用户名称
kedenglu_name=$(cat /etc/passwd | egrep 'sh$' | awk -F: '{ print $1}')
echo "可登录用户名称: $kedenglu_name"
echo '---------------------- 7. 网络配置检查 ----------------------'
# DNS配置和可用性
dns_what=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
dns_keyong=$(ping www.jd.com -c 1 &>/dev/null; echo $?)
if [ $dns_keyong -eq 0 ]; then
echo "DNS可用: $dns_what"
else
echo "DNS不可用"
fi
echo '---------------------- 8. 服务与进程检查 ----------------------'
# 服务进程状态
ps_nginx=$(systemctl is-active nginx)
if [ "$ps_nginx" == "active" ]; then
echo "Nginx服务正在运行"
else
echo "Nginx服务未运行"
fi
ps_sql=$(systemctl is-active mysql)
if [ "$ps_sql" == "active" ]; then
echo "MySQL服务正在运行"
else
echo "MySQL服务未运行"
fi
ps_sshd=$(systemctl is-active sshd)
if [ "$ps_sshd" == "active" ]; then
echo "SSHD服务正在运行"
else
echo "SSHD服务未运行"
fi
# 僵尸进程数量
ps_zombie_number=$(ps -aux | awk 'NR>1' | awk '{print $7}' | grep Z | wc -l)
if [ "$ps_zombie_number" -gt 0 ]; then
echo "存在僵尸进程: $ps_zombie_number 个"
else
echo "没有僵尸进程"
fi
echo '---------------------- 9. 系统服务状态检查 ----------------------'
# 防火墙状态
fire_panduan=$(systemctl is-active iptables)
if [ "$fire_panduan" == "active" ]; then
echo "防火墙已启用"
else
echo "防火墙未启用"
fi
# SELinux 状态
selinux_panduan=$(getenforce)
echo "SELinux状态: $selinux_panduan"
# 启用的服务
systemctl_enable=$(systemctl list-unit-files | grep enabled | awk '{print $1}')
echo "启用的服务: $systemctl_enable"
# 是否有备份任务
beifen_panduan=$(crontab -l | grep backup | echo $?)
if [ $beifen_panduan -eq 0 ]; then
echo "有备份任务"
else
echo "没有备份任务"
fi
# 时间同步任务是否存在
time_panduan=$(crontab -l | grep ntpdate | echo $?)
if [ $time_panduan -eq 0 ]; then
echo "存在时间同步任务"
else
echo "没有时间同步任务"
fi
echo '---------------------- 10. 防火墙与安全检查 ----------------------'
# 系统防火墙
firewalld_panduan=$(systemctl is-active firewalld)
if [[ "$firewalld_panduan" == 'inactive' ]]; then
echo '防火墙未开启'
else
echo '防火墙已经开启'
fi
# 系统 SELinux
selinux_panduan=$(getenforce)
echo "SELinux状态: $selinux_panduan"
# 系统 sshd 检查
ssh_file=/etc/ssh/sshd_config
ssh_prot_jiancha=$(cat $ssh_file | egrep -v '^$|#' | grep port | awk '{print $2}')
ssh_root_jiancha=$(grep "^PermitRootLogin" $ssh_file | awk '{print $2}')
ssh_passwrod_jiancha=$(grep "^PasswordAuthentication" $ssh_file | awk '{print $2}')
if [[ "$ssh_prot_jiancha" -eq 22 ]]; then
echo "端口为默认,容易被攻击"
fi
if [[ "$ssh_root_jiancha" == "yes" ]]; then
echo "root允许远程登陆"
else
echo "root不允许远程登陆"
fi
if [[ "$ssh_passwrod_jiancha" == "yes" ]]; then
echo "root允许密码登陆"
else
echo "root不允许密码登陆"
fi
# 系统日志检查
system_log_status=$(journalctl -p 3 -n 10 | grep Failed | wc -l)
if [[ "$system_log_status" -eq 0 ]]; then
echo "系统日志错误: 无错误"
else
echo "系统日志错误: 存在错误"
fi
echo '巡检结束 请检查失败的地方'
# 建议保存为 check_system.sh 并赋予执行权限: chmod +x check_system.sh
案例二:一键备份网站目录与数据库
脚本用途:对网站文件和 MySQL 数据库进行自动压缩备份。
shell
#!/bin/bash
# 设置变量
backup_dir="/backup/$(date +%F)"
web_dir="/var/www/html"
db_user="root"
db_pass="yourpassword"
db_name="yourdb"
# 创建备份目录
mkdir -p "$backup_dir"
# 备份网站文件
tar -czf "$backup_dir/webfiles.tar.gz" "$web_dir"
# 备份数据库
mysqldump -u"$db_user" -p"$db_pass" "$db_name" > "$backup_dir/db.sql"
echo "备份完成,保存于:$backup_dir"
案例三:检查服务是否存活并自动拉起
脚本用途:定时检查服务是否运行,如果未运行则自动启动。
shell
bash
复制编辑
#!/bin/bash
service_name="nginx"
if ! pgrep -x "$service_name" > /dev/null; then
echo "$service_name 未运行,尝试启动..."
systemctl start "$service_name"
sleep 1
if pgrep -x "$service_name" > /dev/null; then
echo "$service_name 启动成功"
else
echo "$service_name 启动失败"
fi
else
echo "$service_name 正在运行"
fi
案例四:清理系统日志和缓存
脚本用途:释放磁盘空间,清理旧日志与缓存文件。
shell
#!/bin/bash
echo "开始清理..."
# 清理日志
find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
# 清理 apt 缓存
apt-get clean
# 清理缓存
rm -rf /var/cache/* /tmp/*
echo "清理完成"
案例五:批量修改文件权限
脚本用途:递归修改目录中文件和目录的权限。
shell
#!/bin/bash
target_dir="/your/path"
find "$target_dir" -type f -exec chmod 644 {} \;
find "$target_dir" -type d -exec chmod 755 {} \;
echo "文件权限修改完成"
案例六:查看大文件排行(磁盘排查)
脚本用途:查找指定目录下占用空间最大的前 10 个文件。
shell
#!/bin/bash
target_dir=${1:-/} # 默认检查根目录,可自定义
echo "正在分析目录: $target_dir"
du -ah "$target_dir" 2>/dev/null | sort -rh | head -n 10
案例七:监控某个端口是否开放
脚本用途:判断某个端口是否处于监听状态。
shell
#!/bin/bash
port=80
if ss -ltn | grep -q ":$port "; then
echo "端口 $port 已开启监听"
else
echo "端口 $port 未监听"
fi
案例八:批量检测主机是否在线(Ping 多台主机)
脚本用途:批量 Ping IP,判断主机是否在线。
shell
#!/bin/bash
for ip in 192.168.1.{1..10}; do
if ping -c 1 -W 1 $ip &>/dev/null; then
echo "$ip 在线"
else
echo "$ip 不可达"
fi
done
案例九:定时删除 7 天前的日志文件
脚本用途:清理老旧日志,释放磁盘空间。
shell
#!/bin/bash
log_dir="/var/log/myapp"
find "$log_dir" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
echo "已删除 7 天前日志"
案例十:自动打包并上传至远程服务器
脚本用途:将文件压缩后通过 scp 上传。
shell
#!/bin/bash
src_dir="/data/project"
backup_file="project_$(date +%F).tar.gz"
remote_user="user"
remote_host="192.168.1.100"
remote_dir="/backup/"
# 压缩
tar -czf "$backup_file" "$src_dir"
# 上传
scp "$backup_file" ${remote_user}@${remote_host}:${remote_dir}
# 清理本地压缩包
rm -f "$backup_file"
echo "打包上传完成"
案例十一:检测磁盘使用率并报警
脚本用途:检测根分区使用率,超过阈值则报警。
shell
#!/bin/bash
threshold=80
usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$usage" -gt "$threshold" ]; then
echo "警告:磁盘使用率已达 $usage%"
else
echo "磁盘使用正常,当前使用率为 $usage%"
fi
案例十二:查找最近修改的文件
脚本用途:找出最近 10 分钟内被修改过的文件。
shell
#!/bin/bash
find /path/to/check -type f -mmin -10
案例十三:查看内存使用最多的进程
脚本用途:按内存使用排序显示前 5 个进程。
shell
#!/bin/bash
ps aux --sort=-%mem | head -n 6
案例十四:快速查看当前登录用户
脚本用途:显示当前登录系统的所有用户。
shell
#!/bin/bash
who | awk '{print $1}' | sort | uniq
案例十五:批量创建用户脚本
脚本用途:根据用户名列表文件,批量创建用户。
shell
#!/bin/bash
while read user; do
if id "$user" &>/dev/null; then
echo "用户 $user 已存在"
else
useradd "$user"
echo "用户 $user 已创建"
fi
done < users.txt
(说明:users.txt
文件中每一行是一个用户名)
案例十六:定期检测网页状态
脚本用途:检测网站是否正常访问。
shell
#!/bin/bash
url="https://www.example.com"
status_code=$(curl -o /dev/null -s -w "%{http_code}" "$url")
if [ "$status_code" -eq 200 ]; then
echo "网站访问正常"
else
echo "警告:网站访问异常,状态码为 $status_code"
fi
案例十七:查看服务器最近一次开机时间
脚本用途:查看服务器的开机时间和运行时长。
shell
#!/bin/bash
echo "最近一次开机时间:$(who -b)"
echo "已运行时长:$(uptime -p)"
案例十八:批量 ping 多台主机检测网络通畅性
脚本用途:从文件中读取 IP 列表并依次 ping,查看是否可达。
shell
#!/bin/bash
for ip in $(cat ip_list.txt); do
if ping -c 1 -W 1 $ip &>/dev/null; then
echo "$ip 通"
else
echo "$ip 不通"
fi
done
(说明:ip_list.txt
每行一个 IP)
案例十九:统计当前目录下文件类型数量
脚本用途:查看当前目录下各种文件类型的数量。
shell
#!/bin/bash
echo "普通文件数量:$(find . -type f | wc -l)"
echo "目录数量:$(find . -type d | wc -l)"
echo "符号链接数量:$(find . -type l | wc -l)"
案例二十:自动备份指定目录并打包
脚本用途:将指定目录打包为带时间戳的压缩包。
shell
#!/bin/bash
target="/home/user/data"
backup_dir="/home/user/backup"
timestamp=$(date +%F-%H-%M-%S)
filename="backup-$timestamp.tar.gz"
mkdir -p "$backup_dir"
tar -czf "$backup_dir/$filename" "$target"
echo "备份完成:$backup_dir/$filename"
案例二十一:清理日志文件(大于指定大小)
脚本用途:清理当前目录下超过 100MB 的 .log
文件。
shell
#!/bin/bash
find . -name "*.log" -size +100M -exec rm -v {} \;
案例二十二:实时监控某服务状态
脚本用途:每 5 秒检查一次 nginx 是否运行。
shell
#!/bin/bash
while true; do
systemctl is-active nginx &>/dev/null
if [ $? -eq 0 ]; then
echo "$(date): nginx 正在运行"
else
echo "$(date): nginx 已停止"
fi
sleep 5
done
案例二十三:日志分析脚本(Nginx 示例)
脚本用途:统计 Nginx 日志中出现最多的 IP、请求路径、状态码等信息,帮助排查异常流量或攻击行为。
shell
#!/bin/bash
# Nginx 日志文件路径(请根据实际情况修改)
log_file="/var/log/nginx/access.log"
echo "最近访问最多的 IP:"
awk '{print $1}' $log_file | sort | uniq -c | sort -nr | head -10
echo -e "\n请求最多的 URL:"
awk '{print $7}' $log_file | sort | uniq -c | sort -nr | head -10
echo -e "\n最常见的状态码统计:"
awk '{print $9}' $log_file | grep -E '^[0-9]{3}$' | sort | uniq -c | sort -nr
echo -e "\n访问量随时间分布(按小时统计):"
awk '{print $4}' $log_file | cut -d: -f2 | sort | uniq -c
🔍 说明:
$1
: IP 地址$7
: 请求的路径$9
: 返回状态码$4
: 时间字段(包含小时)
案例二十四:Docker 容器运行状态巡检脚本
脚本用途:快速查看系统中所有 Docker 容器的运行状态、端口映射、资源占用等信息。
shell
#!/bin/bash
echo "-------------------- Docker 环境基本信息 --------------------"
docker_version=$(docker -v)
echo "Docker 版本: $docker_version"
echo -e "\nDocker 当前使用的存储驱动:"
docker info | grep "Storage Driver"
echo -e "\nDocker 当前使用的日志驱动:"
docker info | grep "Logging Driver"
echo "-------------------- 正在运行的容器 --------------------"
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"
echo -e "\n-------------------- 所有容器资源占用 --------------------"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
echo -e "\n-------------------- 容器重启次数排行 --------------------"
docker ps -a --format '{{.Names}}\t{{.RestartCount}}' | sort -k2 -nr | head -10
echo -e "\n-------------------- 最近异常退出的容器 --------------------"
docker ps -a --filter "status=exited" --filter "status=dead" --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" | head -10
📌 说明:
docker ps
:列出当前运行中的容器。docker stats --no-stream
:显示容器资源使用情况(CPU、内存)。--format
:格式化输出,便于脚本处理。RestartCount
仅在部分 Docker 版本中支持。
案例二十五:扫描 192.168.2.0/24
网络内在线主机
脚本用途:扫描局域网内 192.168.2.0/24
网段内的主机,并列出当前在线的 IP 地址。
shell
#!/bin/bash
# 设置扫描的网络段
network="192.168.2.0/24"
echo "开始扫描网络:$network"
# 使用 nmap 扫描在线的 IP 地址
online_ips=$(nmap -sn $network | grep "Nmap scan report for" | awk '{print $5}')
echo "当前在线的 IP 地址:"
for ip in $online_ips; do
echo $ip
done
说明:
nmap -sn $network
:使用 Nmap 工具进行网络扫描,-sn
选项表示仅扫描主机存活状态。grep "Nmap scan report for"
:筛选出 Nmap 输出中的主机信息。awk '{print $5}'
:提取出每一行中的 IP 地址。
前提:
- 需要安装
nmap
工具。可以通过sudo apt install nmap
安装。 nmap
扫描可能会被防火墙或网络设备限制。
案例二十六:基于 Web 日志监控并封禁异常 IP(防止 DDoS 攻击)
脚本用途:通过分析 Web 服务器日志,监控某个 IP 地址的并发连接数或页面访问量。如果某个 IP 地址在短时间内访问超过阈值(例如:100),就自动封禁该 IP。
shell
#!/bin/bash
# 配置参数
log_file="/var/log/nginx/access.log" # Nginx 或 Apache 访问日志
max_requests=100 # 设置并发连接数或者访问量的阈值(根据实际情况调整)
block_duration=3600 # 封禁时长(单位:秒)
echo "检查 Web 日志并查找异常 IP ..."
# 找到访问量超过阈值的 IP
exceed_ips=$(awk '{print $1}' $log_file | sort | uniq -c | awk -v max_requests=$max_requests '$1 > max_requests {print $2}')
# 如果有超过阈值的 IP,则封禁
for ip in $exceed_ips; do
echo "发现异常 IP: $ip,超出访问量阈值,封禁中..."
# 封禁 IP 地址
iptables -I INPUT -s $ip -j DROP
echo "IP: $ip 已被封禁"
# 可选:封禁后将封禁记录添加到一个日志文件中,便于审计
echo "$(date)封禁 IP: $ip" >> /var/log/ddos_block.log
# 可选:设置防火墙规则的过期时间
# iptables -I INPUT -s $ip -j DROP
# 在 $block_duration 秒后自动解除封禁规则
sleep $block_duration
iptables -D INPUT -s $ip -j DROP
echo "$(date)解除封禁 IP: $ip" >> /var/log/ddos_block.log
done
echo "DDoS 防护脚本执行完毕"
解释:
log_file
:指定 Web 服务器的访问日志文件路径(根据实际环境修改)。max_requests
:设置每个 IP 地址允许的最大请求次数。如果某个 IP 地址在短时间内超过此阈值,则被认为是 DDoS 攻击的嫌疑 IP。iptables -I INPUT -s $ip -j DROP
:使用iptables
防火墙封禁目标 IP 地址的所有访问。sleep $block_duration
和iptables -D
:设置一个自动解除封禁的机制,封禁一段时间后自动解除。
案例二十七:批量检查多个网站地址是否正常
脚本用途:批量检查多个网站地址的可用性,每 10 秒钟做一次检测。如果某个网站无法访问,则输出报警。
shell
#!/bin/bash
# 待检测的网站地址列表
urls=("http://blog.alexmk.com" "http://blog.alexmk.org" "http://alexmk.blog.51cto.com" "http://10.0.0.7")
# 检查次数(循环次数)
check_interval=10 # 每 10 秒检测一次
echo "开始批量检测网站状态,检测间隔 $check_interval 秒..."
# 无限循环,每 10 秒检测一次
while true; do
for url in "${urls[@]}"; do
# 使用 curl 模拟用户访问,检查网站是否可访问
http_status=$(curl -s -o /dev/null -w "%{http_code}" $url)
# 如果 HTTP 状态码不是 200,表示网站无法访问
if [ "$http_status" -ne 200 ]; then
echo "警告:$url 无法访问,HTTP 状态码:$http_status"
else
echo "$url 正常访问,HTTP 状态码:$http_status"
fi
done
# 每 10 秒检测一次
sleep $check_interval
done
解释:
urls
数组:包含需要检测的网站地址列表。你可以根据实际情况向数组中添加或删除 URL 地址。curl
命令:用于模拟用户访问网站,通过curl -s -o /dev/null -w "%{http_code}"
来获取 HTTP 状态码。-s
表示静默模式,-o /dev/null
表示忽略输出内容,-w "%{http_code}"
获取 HTTP 响应的状态码。- 检测策略:如果返回的 HTTP 状态码不是 200(即网站访问失败),则输出报警信息;否则输出正常访问的信息。
sleep $check_interval
:每 10 秒钟执行一次检测,可以根据需要调整时间间隔。
案例二十八:Nginx 负载节点状态命令行监控
功能描述:通过命令行监控 Nginx 负载均衡节点的状态,使用绿色表示正常节点,使用红色表示不可用的节点。
1. Shell 脚本部分:命令行显示颜色
shell
#!/bin/bash
# 配置 Nginx 代理节点的 IP 地址列表
nodes=("http://192.168.1.10" "http://192.168.1.11" "http://192.168.1.12")
# 健康检查间隔
check_interval=10 # 每 10 秒钟检查一次
# 无限循环检测节点状态
while true; do
# 清屏
clear
echo -e "\033[1;34mNginx Node Health Check\033[0m" # 输出标题,蓝色
# 打印表格头部
echo -e "\033[1;37m----------------------------------------\033[0m"
echo -e "\033[1;37mNode Address\t\tStatus\033[0m"
echo -e "\033[1;37m----------------------------------------\033[0m"
# 检查每个节点的状态
for node in "${nodes[@]}"; do
# 使用 curl 检查节点是否正常
http_status=$(curl -s -o /dev/null -w "%{http_code}" $node)
# 判断节点状态
if [ "$http_status" -ne 200 ]; then
status="down"
color="\033[1;31m" # 红色
else
status="up"
color="\033[1;32m" # 绿色
fi
# 打印节点状态,使用颜色
echo -e "${color}$node\t\t$status\033[0m"
done
# 每 10 秒检测一次
sleep $check_interval
done
颜色输出:
- 使用 `\033[1;32m` 来输出绿色(`up` 状态)。
- 使用 `\033[1;31m` 来输出红色(`down` 状态)。
- 使用 `\033[1;34m` 来输出蓝色(标题部分)。
- 使用 `\033[0m` 来重置颜色。
**clear**
** 命令**:每次循环时清屏,保证输出更新时不会混乱。**curl**
** 命令**:检查每个 Nginx 节点的健康状态,返回状态码200
时表示节点正常。输出格式:通过
\t
(制表符)对齐输出,确保每行显示清晰。运行效果:
当你运行此脚本时,命令行将显示如下内容:
shell
Nginx Node Health Check
----------------------------------------
Node Address Status
----------------------------------------
http://192.168.1.10 up
http://192.168.1.11 down
http://192.168.1.12 up
- 绿色:表示该节点正常(up)。
- 红色:表示该节点不可用(down)。
运行示例:
执行脚本:
shell
./nginx_status_check.sh
- 每次循环(每 10 秒)会清屏并刷新输出,显示各个节点的最新状态。