альтернативы case case в bash - PullRequest
       7

альтернативы case case в bash

0 голосов
/ 02 января 2019

У меня есть скрипт, который зависит от имени хоста.Если имя хоста - X, тогда используйте Y в качестве переменной для этого хоста. Это тип требования.

Отображение находится в файле.Есть около 50 отображений.Мне удалось обработать его с помощью оператора case, но я искал более простые альтернативы для чтения сопоставления из файла, а не я писал оператор case для всех 50 серверов.

Пример:

Файл сопоставлений: 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 голосов
/ 02 января 2019

Считать данные в ассоциативный массив.

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
...