python - shell脚本中的一对一映射
问题描述
我正在迁移过程中。从旧组服务器迁移到新组服务器,其中 2 组之间的服务器名称没有逻辑关系。我有一个在旧服务器上运行的脚本,获取所有必要的备份并运行另一个脚本以将备份复制到新服务器并执行它。
如果我可以包含将旧服务器映射到新服务器的逻辑,我可以组合这两个脚本(备份并复制到新服务器)。有没有办法我可以做到这一点。
Old server New server
King Queen
Bat Ball
water fire
sand rock
我期望的是,如果脚本在服务器“King”上运行,我希望脚本识别相应的新服务器是“Queen”并将备份复制到 Queen。
解决方案
使用 bash 关联数组:
#!/usr/bin/env bash
declare -A renames=( [King]=Queen [Bat]=Ball [water]=fire [sand]=rock )
hostname=$(hostname)
if [[ ${renames[$hostname]} ]]; then
echo "The current host, $hostname, is being renamed to ${renames[$hostname]}"
fi
或者使用运行 case 语句的简单函数,从而与所有POSIX shell 兼容:
newName() {
case $1 in
King) echo "Queen" ;;
Bat) echo "Ball" ;;
water) echo "fire" ;;
sand) echo "rock" ;;
*) return 1 ;;
esac
}
if dest=$(newName "$hostname"); then
echo "Name $hostname is being renamed to $dest"
fi
或者带有一系列前缀变量:
rename_King=Queen
rename_Bat=Ball
rename_water=fire
rename_sand=rock
var="rename_$hostname"
if [[ ${!var} ]]; then
echo "$hostname is being renamed to ${!var}"
fi
或使用目录:
renameDir=/path/to/renames
if [[ -e "$renameDir/$hostname" ]]; then
echo "Renaming $host to $(<"$renameDir/$hostname")"
fi
或扫描文件并找到第一个匹配项:
if dest=$(awk -v search="$hostname" '$1 == search { print $2; exit; }' <input) && [[ $dest ]]; then
echo "Renaming $hostname to $dest"
fi
……等等,等等。
推荐阅读
- google-cloud-platform - GCP 术语 - 虚拟机、实例、工作者、节点
- python-3.x - 有没有办法将 keras 模型摘要记录到海王星?
- r - 按列元素的条件分组
- javascript - 未在循环中定义车把参数
- amazon-web-services - 使用 Terraforms 文件配置器上传文件夹
- npm - NPM 包安装受影响的依赖列表
- google-sheets - 从 Google 表格单元格的第一个括号中提取
- c# - 在 sp_UpdateStockItemAmount 上出现 inteccorect 语法错误
- javascript - 调用signInCallback()时反应应用程序oidc-client IE11问题
- c++ - constexpr 与 lambda 表达式的 C++ 用法