多个if,然后是主机名

时间:2018-02-16 20:47:53

标签: bash

试着查看,但不知道我在寻找什么。

我有4台服务器键入许可证文件,因此主机名必须匹配。我有4个许可文件,我通过Opsworks运行它,所以放手安装。我在一个bash中有一个if似乎正在开启意外的文件结尾。

if [ "$HOSTNAME" = devprint01 ]; then
    cp /home/user/installs/config/linux.cfg.01 /var//filters/linux.cfg
if [ "$HOSTNAME" = devoprint01 ]; then
    cp /home/user/installs/config/linux.cfg.d01 /var//filters/linux.cfg
if [ "$HOSTNAME" = devoprint02 ]; then
    cp /home/user/installs/config/linux.cfg.d02 /var//filters/linux.cfg
if [ "$HOSTNAME" = priprint01 ]; then
    cp /home/user/installs/config/linux.cfg.p01 /var//filters/linux.cfg
if [ "$HOSTNAME" = priprint02 ]; then
    cp /home/user/installs/config/linux.cfg.p02 /var//filters/linux.cfg
fi

前面有一堆cp和其他命令工作正常,所以它必须是我在这上面缺少的东西。每个if语句之间应该有什么东西,还是我应该在每个if语句之间填写?

2 个答案:

答案 0 :(得分:1)

前四个ifs缺少fi

如果你的bash足够新(4.0+),你可以使用关联数组:

declare -A suffix=([devprint01]=01
                   [devoprint01]=d01
                   [devoprint02]=d02
                   [priprint01]=p01
                   [priprint02]=p02
)

cp /home/user/installs/config/linux.cfg.${suffix[$HOSTNAME]} /var/filters/linux.cfg

答案 1 :(得分:0)

你总是可以考虑一个功能。使用函数可以更容易地在不同的地方使用代码(数组将有助于)。

当存在某种算法时,您可以使用代码进行翻译。这样你也可以看到可能的错误或稍后添加主机:

getcfg() {
   echo "$1" | sed -r 's/devprint//;s/(d|p).*print/\1/'
}

/home/user/installs/config/linux.cfg.$(getcfg ${HOSTNAME}) /var/filters/linux.cfg

# Or test it with
for testhostname in devprint01 devoprint01 devoprint02 priprint01 priprint02; do
   echo "${testhostname} => $(getcfg ${testhostname}) "
done