Bash脚本检测$site URL在线状态,失败后10秒复测判定不可达
修复后符合需求的Bash脚本实现
原代码问题说明
- 原代码在
else分支内直接使用了仅属于循环语法的do/done关键字,没有对应for/while等循环结构作为支撑,直接触发语法解析错误 - 原代码遗漏了「首次探测不可达后等待10秒复测」的核心业务逻辑,输出文案也和需求要求的
no access不匹配
修正后的完整可运行脚本
# 替换为实际待检测的站点URL site="https://你的目标站点.com" # 首次发起探测 if wget --spider -S "$site" 2>&1 | grep -qwE "200|301|302"; then # 首次探测命中正常状态码,直接退出脚本 exit 0 else # 首次探测失败,等待10秒后执行复测 sleep 10 # 发起第二次探测 if wget --spider -S "$site" 2>&1 | grep -qwE "200|301|302"; then # 复测恢复正常,直接退出脚本 exit 0 else # 两次探测均未命中正常状态码,输出指定提示 echo "no access" fi fi
关键修正点
- 移除了
else分支内无对应循环支撑的do/done冗余关键字,彻底解决语法报错问题 - 补全了10秒等待、二次探测的分支判断,完全匹配业务规则
- 优化grep匹配逻辑:通过
-E参数支持多状态码的正则匹配,-w参数保证状态码为整词匹配(避免类似2000这类字符串被误判为命中200状态码),-q参数静默匹配过程,无需额外手动重定向输出到/dev/null
注意:执行该脚本需要确保系统已安装wget组件,且当前运行环境有正常的外网访问权限。
内容的提问来源于stack exchange,提问作者AlexPebody
相关产品推荐
相关产品推荐

