比较多变量shell linux的最佳方法

比较多变量shell linux的最佳方法,linux,bash,shell,Linux,Bash,Shell,我有一本Ansible playbook,它收集了一些信息,并最终写入一个类似以下内容的文件: VAR_A=14.12.103 VAR_B=14.12.103 VAR_C=14.12.103 VAR_D=14.12.103 VAR_E=14.12.103 VAR_F=14.12.103 VAR_G=14.12.103 VAR_H=14.12.103 然后,我使用一个shell脚本来比较这些值,以确保每个变量彼此相同 比较这些变量的最佳方法是什么?其实我是: if [ "$VAR_A&

我有一本Ansible playbook,它收集了一些信息,并最终写入一个类似以下内容的文件:

VAR_A=14.12.103
VAR_B=14.12.103
VAR_C=14.12.103
VAR_D=14.12.103
VAR_E=14.12.103
VAR_F=14.12.103
VAR_G=14.12.103
VAR_H=14.12.103
然后,我使用一个shell脚本来比较这些值,以确保每个变量彼此相同

比较这些变量的最佳方法是什么?其实我是:

if [ "$VAR_A" = "$VAR_B" ] && [ "$VAR_B" = "$VAR_C" ] && [ "$VAR_C" = "$VAR_D" ] && [ "$VAR_D" = "$VAR_E" ] && [ "$VAR_E" = "$VAR_F" ] && [ "$VAR_F" = "$VAR_G" ] && [ "$VAR_G" = "$VAR_H" ]; then
  echo "OK"
  exit 0
else
  echo "KO"
  exit 2
fi
但我认为这不是最好的办法

有人有别的解决办法吗


谢谢

取决于您对“最佳”的定义? 你在找运行时吗? 还是清晰

因为您可以使用循环将
VAR\u a
与所有其他变量进行比较,如果任何比较为false,则返回
KO
else
OK


我想不出在bash中加快速度的方法,但如果想到什么,我会编辑它。

取决于您对“最佳”的定义? 你在找运行时吗? 还是清晰

因为您可以使用循环将
VAR\u a
与所有其他变量进行比较,如果任何比较为false,则返回
KO
else
OK

我想不出在bash中加快速度的方法,但如果想到什么,我会编辑它

最后,将如下内容写入文件:

VAR_A=14.12.103
VAR_B=14.12.103
VAR_C=14.12.103
VAR_D=14.12.103
VAR_E=14.12.103
VAR_F=14.12.103
VAR_G=14.12.103
VAR_H=14.12.103
我想:

[[ "$(sed 's/^VAR_[A-H]=//' file | uniq | wc -l)" -eq 1 ]]
这可能要慢得多,但可读性更强。
awk
解决方案可以大大加快速度

我认为在awk中,你可以,未经测试:

if awk -F'=' 'NR==1{l=$2} NR!=1{if ($2 != l) exit 1}' file; then
最后,将如下内容写入文件:

VAR_A=14.12.103
VAR_B=14.12.103
VAR_C=14.12.103
VAR_D=14.12.103
VAR_E=14.12.103
VAR_F=14.12.103
VAR_G=14.12.103
VAR_H=14.12.103
我想:

[[ "$(sed 's/^VAR_[A-H]=//' file | uniq | wc -l)" -eq 1 ]]
这可能要慢得多,但可读性更强。
awk
解决方案可以大大加快速度

我认为在awk中,你可以,未经测试:

if awk -F'=' 'NR==1{l=$2} NR!=1{if ($2 != l) exit 1}' file; then
使用awk,您可以使用:

if awk -F= 'NR == 1 {v = $2} $2 != v {exit 1}' file; then
   echo "OK"
   exit 0
else
   echo "KO"
   exit 2
fi
使用awk,您可以使用:

if awk -F= 'NR == 1 {v = $2} $2 != v {exit 1}' file; then
   echo "OK"
   exit 0
else
   echo "KO"
   exit 2
fi

我更喜欢Clarity我更喜欢clarityInsipred而不是你的答案,我会这样做:如果[$(awk-F“=”{print$2}'文件|排序| uniq | wc-l)-gt 1];然后echo KO else echo OK fi如果您使用awk,它的工作效果非常好,这对整个生产线来说没有什么意义,需要运行3个进程来完成。执行所有操作,即所有
| sort | uniq | wc-l)-gt 1
内部
awk
。。。我想沿着
awk-F'=''NR==1{l=$2}NR=1{如果($2!=l)退出1}
。如果变量值包含
=
在您的答案中,我会这样做:如果[$(awk-F“=”{print$2}文件| sort | uniq | wc-l)-gt 1];然后echo KO else echo OK fi如果您使用awk,它的工作效果非常好,这对整个生产线来说没有什么意义,需要运行3个进程来完成。执行所有操作,即所有
| sort | uniq | wc-l)-gt 1
内部
awk
。。。我想沿着
awk-F'=''NR==1{l=$2}NR=1{如果($2!=l)退出1}
。如果变量值包含
=