如何简化带连字符/下划线的服务器名Zone校验与后续操作
优化服务器Zone校验与zoneshow执行脚本
核心优化点
- 单次SSH拉取全量Zone服务器列表,彻底消除多次远程查询的开销
- 统一标准化格式消除
-和_的变体差异,实现精准匹配 - 批量生成并执行所有符合条件的
zoneshow命令,高效处理多结果场景
1. 预处理本地服务器列表
先把file.txt中的服务器名转换成无符号的标准化格式,同时保留原始名称用于后续关联:
# 生成"原始名称:标准化名称"的映射文本 local_serv_map=$(sed 's/[-_]//g' file.txt | paste -d: file.txt -)
2. 单次远程拉取Zone列表并标准化
通过一次SSH获取所有Zone内的服务器名,同样做标准化处理,保留原始Zone中的名称:
# 远程拉取Zone服务器列表到临时文件 ssh your_user@zone_server 'zoneshow | grep -E "irl-(iv|dv)-host[0-9]+"' > zone_list.tmp # 生成"Zone原始名称:标准化名称"的映射文本 zone_serv_map=$(sed 's/[-_]//g' zone_list.tmp | paste -d: zone_list.tmp -)
3. 匹配并批量生成执行命令
用awk关联两个映射文本,找出所有匹配的Zone服务器名,直接生成批量执行的zoneshow命令:
# 匹配生成命令列表 awk -F: ' NR==FNR { local_map[$2] = 1; next } $2 in local_map { print "zoneshow "$1 } ' <(echo "$local_serv_map") <(echo "$zone_serv_map") > cmd_list.sh # 远程批量执行命令 ssh your_user@zone_server 'bash -s' < cmd_list.sh
4. 清理临时文件
执行完成后清理临时文件:
rm zone_list.tmp cmd_list.sh
内容的提问来源于stack exchange,提问作者gafm
相关产品推荐
相关产品推荐

