我正在尝试从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
我看到消息“Zone example.com已成功删除”但该区域仍在我的named.conf文件中...
再次,当我从cli:
提供上述命令时sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf
该区域被正确删除!!!
显然shell脚本有问题,但没有设法找出它是什么。
对于我在这里所缺少的任何想法将不胜感激!
答案 0 :(得分:1)
您的想法是正确的,但是要扩展变量domain
,它需要存在于双引号内。 shell在将参数传递给sed
之前扩展变量,没有正确引用,模式$domain
被解释为文字字符串。您可以按如下方式嵌套引号
sed -nie '/\"'"$domain"'\"/,/^\};$/d;p;' /etc/named.conf