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

Bash脚本改写:DNS配置文件指定行主机名非法字符检查

改写Bash脚本以检查指定行的主机名非法字符

没问题,咱们来调整这个脚本,让它只检查DNS配置文件的第27到350行,并且能检测所有主机名非法字符(不只是下划线)。下面是完善后的方案:

# 定义主机名允许的合法字符:大小写字母、数字、连字符
VALID_HOSTNAME_PATTERN='^[a-zA-Z0-9-]+$'

# 检查第27-350行中是否存在不符合合法规则的主机名
if sed -n '27,350p' "${changefile}" | grep -qvE "${VALID_HOSTNAME_PATTERN}"; then
    printf "\n错误:第27-350行的主机名中存在非法字符。主机名仅允许包含大小写字母、数字和连字符。\n" >&2
    exit 1
fi

关键部分说明:

  • sed -n '27,350p' "${changefile}":只提取配置文件的第27到350行,避免检查无关内容,提升效率。
  • grep -qvE "${VALID_HOSTNAME_PATTERN}":
    • -q:静默模式,不输出匹配内容,仅返回退出状态供逻辑判断使用。
    • -v:反向匹配,专门找出不符合合法主机名规则的行。
    • -E:启用扩展正则表达式,让匹配规则的写法更简洁清晰。
  • 正则表达式 ^[a-zA-Z0-9-]+$:确保整行(假设每行对应一个主机名)只包含允许的字符。^和$分别锚定行首和行尾,避免出现“部分字符合法但整行有非法字符”的漏检情况。

针对行内特定字段的调整:

如果你的主机名不是整行内容(比如是server my_hostname这类行里的第二个字段),可以修改脚本只针对目标字段检查。比如要检查每行的第二个字段:

sed -n '27,350p' "${changefile}" | awk '{print $2}' | grep -qvE "${VALID_HOSTNAME_PATTERN}"

只需要调整awk '{print $2}'里的数字,对应到你配置文件中主机名所在的字段位置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:18