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
相关产品推荐
相关产品推荐

