我需要编写一个 shell 脚本来检查resolv.conf
例如
domain example.com
search abc.com abc.org abc.net
nameserver 1.1.2.2
nameserver 3.3.4.4
abc.com
//abc.org
可以abc.net
按任意顺序出现
nameserver
行可以按任何顺序出现
参数之间可能有空格。
可以使用什么逻辑来检查配置
例如,如果abc.com
缺失,则应突出显示 abc.com 缺失
答案1
检查文件是否包含特定模式的最基本方法是使用常见的grep
命令行实用程序。
使用正确的标志和选项,您可以构建一个基本脚本,执行与以下伪代码类似的操作:
# Break down the elements you're looking for
# in basic regular expression patterns
# and store them in an array
MyRequiredEntries=("nameserver\s*1.1.2.2" "nameserver\s*3.3.4.4" "domain\s*example.com" "search\s.*abc\.com" "search\s.*abc\.net")
# Loop over the array elements
for MyEntry in "${MyRequiredEntries[@]}"
do
# use the exit code of grep -q for further logic
grep -q "$MyEntry" /etc/resolv.conf
MyResult=$?
if [ $MyResult -eq 0 ] ; then
echo "do something when resolv.conf contains the pattern $MyEntry"
else
echo "do something when resolv.conf does NOT contain the pattern $MyEntry"
fi
done
当然可以根据您的需要进行微调。
正如其他人所评论的那样:与其玩一场“发现不同之处” 您可能需要退一步思考为什么要进行这项测试以及您打算如何处理您的研究结果。
如果最终结果是确保所有服务器都具有正确的配置,那么最好开始使用配置管理系统来管理它们,并避免将来出现这些差异。
如果启动中央配置管理解决方案仍然太过遥远,而不是测试然后手动修复设置:不要费心,直接在所有地方应用正确的设置...
附注:当您的(某些)系统配置了 DHCP 时,您可能需要从那里开始推送正确的设置。