bash中的案例陈述替代

时间:2019-01-02 15:38:11

标签: linux bash shell unix switch-statement

我有一个依赖于主机名的脚本。如果主机名是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

1 个答案:

答案 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