我有一个依赖于主机名的脚本。如果主机名是X,则需要使用Y作为该主机的变量。
映射在文件中。大约有50个映射。我能够使用case语句来解决这个问题,但是我正在寻找更简单的方法来从文件中读取映射,而不是为所有50台服务器编写case语句。
示例:
映射文件为file.txt
。
Apple Fruit
chair furniture
man human
pizza food
我的逻辑在起作用:
hostname=uname -n
case $hostname in
chair )
Qmgr=furniture
rest of my code here
;;
Apple )
Qmgr=fruit
rest of my code here
;;
man )
Qmgr=Human
rest of my code here
;;
pizza )
Qmgr=Food
rest of my code here
;;
* )
not recognized serer from the mappings file.txt
;;
esac
答案 0 :(得分:2)
将数据读入关联数组。
declare -A managers
while read -r host mgr; do
managers[$host]=$mgr
done < file.txt
hostname=$(uname -n)
qmgr=${managers[$hostname]}
if [[ -z $qmgr ]]; then
printf 'Unrecognized server %s\n' "$hostname"
fi