如何修改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
相关产品推荐
相关产品推荐

