当前位置: 首页 > 知识库问答 >
问题:

减少Unix中的多个IF-ELSE条件,实现数组

戚星腾
2023-03-14

目前,我有下面的脚本来检查相应的服务是否在我的服务器上运行或没有使用一些内部逻辑。请在下面查找代码段:

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

现在,由于所有服务器都没有运行所有服务,如果条件变得更加不可读/不必要的复杂。目前我有10台服务器和8个服务,其中不同的服务在不同的服务器上运行。此外,在未来,任何服务都可以在之前未运行的特定节点上调用/开始运行,在这种情况下,我必须再次更改脚本。

我明白,如果有任何变化,我肯定必须更改脚本并在所有服务器中进行更新,但我想让这个过程不那么痛苦。

我可以实现类似于在脚本开始时定义的数组的东西,以指出给定服务是否在特定节点上运行。我从stackoverflow的这个问题中学到了一些东西。

我知道多维数组可以很容易地在C中实现,但由于我对shell脚本很陌生,我想知道是否有任何可能使我的脚本更具可读性和易编辑性!!!

共有1个答案

程和煦
2023-03-14

由于所有的if检查都使用相同的变量,因此可以将其简化为case

case "$MY_SERVER_ID" in
X11|X22|X33)
    echo "Service 1 running" ;;
esac

bash没有多维数组,但只要值简单,就可以使用空格分隔的字符串替代第二个维度。

declare -A services
all_services=([X11]="1 2" [X22]="1 2" [X33]="1")
services=${all_services[$MY_SERVER_ID]}
for i in $services; do
    echo "Service $i running"
done

另一种可能性是将数据存储在JSON文件中并使用jq实用程序来解析它并提取值。这个更详细的版本留给读者练习(我对这个工具不是很有经验)。

 类似资料:
  • 我目前正在了解React Native中的if-else if-else语句的语法。下面是我理解的一个简单的if-else条件: 但是,当添加另一个条件来生成if-else if-else语句时,我遇到了问题。 如果有人能指出我的缺点,我将不胜感激!

  • 问题内容: 我正在重构现有代码。它实际上可以正常工作,但是在检查一个变量的值并将第二个变量的值更改为取自固定枚举结构的更新后的值的多个if-else条件下有点混乱。 我对重构和清理此代码的最佳方法感到有些困惑。您是否建议使用开关?还是更优雅的东西? 提前致谢! 问题答案: 至少对于J2SE 1.5转发,您可以为枚举赋予额外的属性。这意味着您可以用类似如下的内容替换整个if-else字符串 现在,在

  • Go语言的条件判断结构也很简单。 package main import "fmt" func main() { // 基本的例子 if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } // 只有if条件的情况 if 8%4

  • 我有一个简单的角度/html代码,其中有一个表,每个

  • 问题内容: 我有一个像下面的数据框。 我需要基于多个条件派生Flag列。 我需要比较触发器1 -3列的得分和身高列。 标志栏: 如果得分大于等于触发器1并且高度小于8,则红色- 如果得分大于等于触发器2并且高度小于8,则黄色- 如果得分大于等于触发器3并且高度小于8,则橙色- 如果高度大于8,则留空 如果在pandas数据框中有其他条件并导出列,该如何写? 预期产量 对于我原始问题中的其他列Tex

  • 我读过很多关于代码重构和避免if-else语句的主题。实际上,我有一个类,我使用了很多if-else条件。 更多细节:我正在使用pull解析器,在soap响应的每一行,我会检查是否有我感兴趣的标签,如果没有,请检查另一个标签等: 现在,我想用别的东西,而不是那些if else条件,但我不知道是什么。 你能给我举个例子吗?