You need to enable JavaScript to run this app. 使用Bash批量查询多域名可用性 排查脚本运行报错问题
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash批量查询多域名可用性 排查脚本运行报错问题

报错核心原因

出现这个问题的本质是脚本把需要作为参数传递的正则字符串,直接当成独立执行命令写在了脚本执行流里。bash解析到第9行的那串正则字符串时,会尝试在系统PATH路径下查找和这串字符串完全同名的可执行程序,找不到自然会抛出“无法识别该命令”的报错,完全不是正则语法本身的问题。

典型错误书写场景参考:

# 错误示例:正则被裸写在执行流中
#!/bin/bash
prefix_list=("apple" "banana" "cherry")
for p in ${prefix_list[@]}; do
  domain="${p}.com"
  result=$(whois $domain)
  # 第9行就是直接把正则写在这里,没有挂在任何工具调用后面
  "^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri"
done

正确实现步骤
  • 把匹配规则的正则单独定义为脚本常量,统一维护。定义的时候不要让这行单独执行——直接把正则字符串赋值给变量,bash就不会把它当命令处理。
  • 调用grep工具传入正则作为匹配参数,完成状态判断。匹配时需要开启grep的扩展正则模式(加-E参数),不然正则里的|逻辑或语法会失效。
  • 补充基础容错逻辑,避免脚本因环境问题直接崩溃:
    • 前置检查系统是否安装whois命令
    • 每次查询间隔加延迟,避免因为请求频率过高被域名注册局限流

完整可运行脚本
#!/bin/bash
# 批量.com域名可用性查询脚本
DOMAIN_PREFIX=("test123" "demo456" "personal789")
# 定义可注册状态匹配正则(赋值操作不会触发bash把字符串当命令)
AVAIL_PATTERN='^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri'

# 前置环境校验
if ! command -v whois &>/dev/null; then
  echo "运行失败:系统未安装whois工具,请先安装后重试"
  exit 1
fi

for prefix in "${DOMAIN_PREFIX[@]}"; do
  target_domain="${prefix}.com"
  echo "正在查询:${target_domain}"
  # 获取whois查询结果,合并错误输出避免异常内容被漏掉
  query_output=$(whois "$target_domain" 2>&1)
  # 把定义好的正则作为grep的匹配参数传入做判断
  if echo "$query_output" | grep -qE "$AVAIL_PATTERN"; then
    echo "结果:${target_domain} 当前可注册"
  else
    echo "结果:${target_domain} 已被注册"
  fi
  # 间隔1秒避免高频请求被限流
  sleep 1
done

易踩坑提醒
  • 所有正则类的字符串,必须要么作为变量赋值给某个值,要么作为grep/sed/awk等工具的入参,要么放在[[ ]]条件判断的模式位置,绝对不能没有任何上下文直接单独占一行写在脚本里,一定会被bash识别成待执行命令。
  • 不要漏掉grep的-E参数,否则扩展正则里的|会被当成普通文本字符匹配,最终判断结果会完全失准。
  • 脚本写完后需要加可执行权限才能运行:chmod +x batch_domain_check.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 20:36:07