以高效的方式重写bash脚本以基于服务器运行

以高效的方式重写bash脚本以基于服务器运行,bash,shell,Bash,Shell,我正在编写一个脚本和一个逻辑片段,以使进程在服务器上运行,我有一个函数stat\u check要执行一些步骤 我想知道,有没有什么有效的方法可以做到这一点并减少行数 目标-希望根据服务器将唯一变量传递给stat\u check。我可以将服务器列表放在一个单独的文件和/或下面提到的变量中,即servers Servers=(flipunix1 flipunix2 flipunix3 flipunix7) for i in ${Servers[*]} do if [ "$SERVER_NA

我正在编写一个脚本和一个逻辑片段,以使进程在服务器上运行,我有一个函数
stat\u check
要执行一些步骤

我想知道,有没有什么有效的方法可以做到这一点并减少行数

目标-希望根据服务器将唯一变量传递给
stat\u check
。我可以将服务器列表放在一个单独的文件和/或下面提到的变量中,即
servers

Servers=(flipunix1 flipunix2 flipunix3 flipunix7)
for i in ${Servers[*]}
do
if [ "$SERVER_NAME" == "$i" ];
  then
    stat_check twitter
    stat_check appcreds
    break 2
fi
done

if [ "$SERVER_NAME" == flipunix5 ];
then
stat_check twitter_stats
stat_check relishprogram
fi

在这里,一份案例陈述是合适的:

中的案例“$SERVER\u NAME”
flipunix1 | flipunix2 | flipunix3 | flipunix7)
统计检查推特
统计检查应用程序
;;
flipunix5)
统计信息检查推特统计信息
统计检查程序
;;
以撒
因为您在那里使用shell模式,所以可以编写

中的案例“$SERVER\u NAME”
flipunix[1237])。。。
flipunix[5])。。。

在这里,案例陈述是合适的:

中的案例“$SERVER\u NAME”
flipunix1 | flipunix2 | flipunix3 | flipunix7)
统计检查推特
统计检查应用程序
;;
flipunix5)
统计信息检查推特统计信息
统计检查程序
;;
以撒
因为您在那里使用shell模式,所以可以编写

中的案例“$SERVER\u NAME”
flipunix[1237])。。。
flipunix[5])。。。

关联数组将切断循环:

declare -A Servers=([flipunix1]="." [flipunix2]="." [flipunix3]="." [flipunix7]=".")

if [ "${Servers[$SERVER_NAME]}" ]
  then
    stat_check twitter
    stat_check appcreds
fi

if [ "$SERVER_NAME" == flipunix5 ]
then
    stat_check twitter_stats
    stat_check relishprogram
fi
当我运行上述程序时,我得到:

$ SERVER_NAME=fsdfa bash test
$ SERVER_NAME=flipunix1 bash test
test: line 4: stat_check: command not found
test: line 5: stat_check: command not found
$
你也可以对数据做一些巧妙的处理,例如:

declare -A Servers=([flipunix1]="normal" [flipunix2]="normal" [flipunix3]="normal" [flipunix7]="normal" [flipunix5]="stats")

case "${Servers[$SERVER_NAME]}" in
normal)
    stat_check twitter
    stat_check appcreds
;;
stats)   
    stat_check twitter_stats
    stat_check relishprogram
;;
esac

关联数组将剪切循环:

declare -A Servers=([flipunix1]="." [flipunix2]="." [flipunix3]="." [flipunix7]=".")

if [ "${Servers[$SERVER_NAME]}" ]
  then
    stat_check twitter
    stat_check appcreds
fi

if [ "$SERVER_NAME" == flipunix5 ]
then
    stat_check twitter_stats
    stat_check relishprogram
fi
当我运行上述程序时,我得到:

$ SERVER_NAME=fsdfa bash test
$ SERVER_NAME=flipunix1 bash test
test: line 4: stat_check: command not found
test: line 5: stat_check: command not found
$
你也可以对数据做一些巧妙的处理,例如:

declare -A Servers=([flipunix1]="normal" [flipunix2]="normal" [flipunix3]="normal" [flipunix7]="normal" [flipunix5]="stats")

case "${Servers[$SERVER_NAME]}" in
normal)
    stat_check twitter
    stat_check appcreds
;;
stats)   
    stat_check twitter_stats
    stat_check relishprogram
;;
esac

我不明白脚本在做什么,你能解释一下吗?
Servers
是一个关联数组-因此它不是通过索引(1,2,3…)访问的,而是通过一个唯一的字符串(在本例中,
SERVER\u NAME
)访问的。关联数组在现代编程语言中非常常见,您可以在internet上了解它们,或者从
manbash
arrays
部分了解bash实现。这个案例只是一个普通的case语句,所以你可以从<代码>服务器查找<代码> ServILNEXNE/CONT>的值,并根据它的实际情况,采取一些行动。如果你有大量的数据,你可以考虑把它放在一个单独的文件中,并在你的脚本中获取这个文件。我不理解脚本在做什么。您能解释一下吗?
Servers
是一个关联数组,因此它不是通过索引(1,2,3…)访问的,而是通过一个唯一的字符串(在本例中为
SERVER\u NAME
)访问的。关联数组在现代编程语言中非常常见,您可以在internet上了解它们,或者从
manbash
arrays
部分了解bash实现。这个案例只是一个普通的case语句,所以您可以从<代码>服务器查找<代码> ServEngEng/<代码>的值,并根据它的实际情况,采取一些行动。如果您有大量的数据,您可以考虑将其全部放在一个单独的文件中,并在您的脚本中获取该文件。但我有这么多服务器。正如我所说,这是一个片段。这也是正确的表达方式吗<代码>flipunix[1237]| flip[12]中的案例“$SERVER_NAME”。。。flipunix[5])…是的,管道是模式列表的分隔符我想到了
case
选项,但我有这么多服务器。正如我所说,这是一个片段。这也是正确的表达方式吗<代码>flipunix[1237]| flip[12]中的案例“$SERVER_NAME”。。。flipunix[5])…是的,管道是模式列表的分隔符我没有,除非我没有抓住要点,GNU parallel在这里不是正确的用例。不是吗?我没有,除非我没有抓住要点,GNU并行在这里不是正确的用例。不是吗?