如何编写可接收cat管道输入的bash脚本获取子域名HTTP响应码
管道接收输入的脚本实现方案
当通过cat subdomains.txt | ./httpResponse调用脚本时,传入的子域名内容会进入脚本的标准输入流(stdin),不需要提前把内容赋值给固定列表变量,可直接通过循环逐行读取处理。
完整可运行的脚本实现
优先用while read循环逐行读取输入,避免for循环因拆分规则导致的内容识别错误(for循环默认按空白字符拆分内容,遇到空行、特殊字符很容易出问题)。
创建httpResponse脚本,内容如下:
#!/bin/bash # 逐行读取stdin内容,兼容最后一行无换行符的场景 while IFS= read -r subdomain || [ -n "$subdomain" ]; do # 跳过空行,避免发起无效请求 if [ -z "$subdomain" ]; then continue fi # 发送请求获取状态码,设置5秒超时避免脚本卡滞 http_status=$(curl --write-out "%{http_code}" --silent --output /dev/null --max-time 5 "http://${subdomain}") echo "${subdomain}: ${http_status}" done
写完脚本后给文件加执行权限:
chmod +x ./httpResponse
常见踩坑提醒
- 原示例中curl命令前多余的
echo需要删掉,否则只会把curl命令打印在屏幕上,不会真正发起请求 - 不要用
for subdomain in $(cat -)这类写法遍历输入流,这种写法会把换行、空格、制表符全部当成分隔符,极易出现内容拆分错误 - 可根据实际需求把请求前缀从
http://替换为https://
内容的提问来源于stack exchange,提问作者Scara
相关产品推荐
相关产品推荐

