使用 shell 脚本从 named.conf 中删除区域

使用 shell 脚本从 named.conf 中删除区域

我正在尝试从 bind 的 named.conf 文件中删除现有的区域记录(在 centos 7 版本上)。

区域记录如下所示:

zone "example.com" IN {
        type master;
        file "example.com.zone";
};

命令:

sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf

删除该记录(正如所料)。

接下来,我创建了以下具有可执行权限的 shell 脚本 (rm-zone.sh) 来执行相同的工作:

#!/bin/sh

[ $# -lt 1 ] && {
        echo "usage: $0 <domain>"
        exit 1
}

domain=$1

sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf

rndc reload

echo Zone: $domain deleted successfully

当我以 root 身份登录并运行命令时:

./rm-zone.sh example.com

我看到消息“区域 example.com 已成功删除”,但该区域仍然在我的 named.conf 文件中...

再次,当我从 cli 给出上述命令时:

sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf

该区域已被正确删除!

显然 shell 脚本有问题,但还没能找出问题所在...

如果您对我在此处遗漏的内容有任何想法,我将不胜感激!

答案1

尝试

sed -nie "/\"$domain\"/,/^\};"'$/d;p;' /etc/named.conf

代替

sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf

单引号禁用 shell 对 或\|的解释$domain

答案2

关于你正在解决的实际问题,我认为可能值得研究使用rndc addzone/rndc delzone(依赖于allow-new-zones选项)允许自动添加/删除区域,而不是named.conf自己编写脚本进行修改。

虽然我不确定你的脚本到底出了什么问题,但是它的编写方式无论发生什么,它都会顺利通过并在最后无条件地打印“已成功删除”消息。

也许set -ex在脚本早期添加有助于排除故障?(-e总体来说这可能是一个好主意?)

保留某种备份也是明智之举,以便在发生故障时可以恢复,并且也许可以调用named-checkconf它来检查新文件是否合理?

相关内容