You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Shell脚本以检测HTTP 200-299全范围成功响应?

问题:修改脚本以检测200-299区间的HTTP成功响应

现有一段用于检测GET请求URL响应的bash脚本,当前仅能识别HTTP 200 OK的成功响应,需要修改为支持所有200-299区间的成功状态码。

原脚本代码:

for url in "${urls[@]}"; do
    response=$(curl -Is "$url" | head -n 1)
    if [[ ! $response =~ "200 OK" ]]; then
        down_urls+="$url\n"
    fi
done

方案一:提取状态码做数值判断

通过提取响应头中的状态码字段,直接做数值范围判断,逻辑更直观:

for url in "${urls[@]}"; do
    # 从响应头第一行提取HTTP状态码
    status_code=$(curl -Is "$url" | head -n 1 | awk '{print $2}')
    # 判断状态码是否不在200-299区间内
    if ! (( status_code >= 200 && status_code <= 299 )); then
        down_urls+="$url\n"
    fi
done

修改说明:

  • 用awk '{print $2}'精准提取响应头第一行的状态码(HTTP响应头第一行的第二个字段就是状态码)
  • 使用bash的算术表达式(( ... ))进行数值范围判断,能覆盖所有200到299之间的成功状态码

方案二:正则匹配2xx状态码

如果不想额外提取字段,也可以直接修改正则匹配规则,覆盖所有2xx开头的状态码:

for url in "${urls[@]}"; do
    response=$(curl -Is "$url" | head -n 1)
    # 匹配所有200-299区间的状态码(正则中2[0-9][0-9]表示以2开头的三位数)
    if [[ ! $response =~ "2[0-9][0-9] " ]]; then
        down_urls+="$url\n"
    fi
done

修改说明:

  • 将原正则"200 OK"替换为"2[0-9][0-9] ",其中2[0-9][0-9]匹配所有200-299的数字,末尾的空格用于避免误匹配响应头中其他包含类似数字的内容

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:53:11