比较多变量shell linux的最佳方法
我有一本Ansible playbook,它收集了一些信息,并最终写入一个类似以下内容的文件:比较多变量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&
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
elseOK
我想不出在bash中加快速度的方法,但如果想到什么,我会编辑它。取决于您对“最佳”的定义? 你在找运行时吗? 还是清晰 因为您可以使用循环将
VAR\u a
与所有其他变量进行比较,如果任何比较为false,则返回KO
elseOK
我想不出在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}
。如果变量值包含=