【发布时间】:2019-11-22 12:39:28
【问题描述】:
目前我有下面的脚本来检查相应的服务是否在我的服务器上运行或没有使用一些内部逻辑。请在下面找到代码sn-p:
MY_SERVER_ID=X22 //stored somewhere in profile of the servers
if [ "$MY_SERVER_ID" = "X11" -o "$MY_SERVER_ID" = "X22" -o "$MY_SERVER_ID" = "X33" ]
then
##do xx
echo " Service 1 : Running "
fi
if [ "$MY_SERVER_ID" = "X11" -o "$MY_SERVER_ID" = "X22" ]
then
##do xx
echo " Service 2 : Running "
fi
现在,由于并非所有服务器都运行所有服务,因此 If 条件变得更加不可读/不必要的复杂。目前我有 10 多台服务器和 8 多台服务,不同的服务在不同的服务器上运行。此外,将来任何服务都可以在之前未运行的特定节点上被调用/开始运行,在这种情况下,我必须再次更改脚本。
我了解,如果发生任何更改,我肯定必须更改脚本并在所有服务器中进行更新,但是我想让这个过程比现在更痛苦。
我可以实现类似在脚本开头定义的数组,以指出给定服务是否在特定节点上运行。我从 this stackoverflow 上的问题中得到的一些东西。
我知道多维数组可以很容易地在 C 中实现,但由于我对 shell 脚本很陌生,我想知道是否有可能使我的脚本更具可读性和更易于编辑!!!
【问题讨论】:
-
Shell 没有多维数组或其他复杂的数据结构。你真的必须为此使用 shell 吗?
-
实际上,BASH 不支持多维数组,但 ksh 支持(以及复合变量)。也就是说,如果我可以说的话,可以使用多个数组来模拟它们。取决于您心目中/需要的数据类型及其不同的关系。
-
bash 支持带有
declare -A的关联数组(映射)。值可以是数组。 -
旁注:当您可以使用诸如 ansible 和 puppet 之类的部署工具和诸如 zabbix、graphite 或 nagios 或 prometheus 之类的监控工具时,为什么要自己实现它
-
@Barmar 不幸的是,我只需要在 shell 中执行此操作。谢谢你的回答。