兩集合比較判斷

最愛喝酸奶發表於2019-01-11

在生產環境下,有時我們會使用指令碼來進行包的更新。這就涉及到一個問題:假如同時更新幾十上百個包,我們要使用指令碼中某個指定引數來完成,偶爾犯錯就有可能將更新包遺漏一兩個。因此,我們需要進行判斷,提示遺漏的包,只要包有所遺漏就不進行更新,所有包齊全才會進行更新。

具體需求如下:

1)指令碼名為update,指定引數為client;

2)更新包所在目錄為 /data ;

3)更新包分別是agent-client.tgz 、 manager-client.tgz 、merchant-client 、online-client.tgz 、partner-client.tgz

4)全部更新包都存在才進行更新,否則不更新

參考指令碼如下:

#!/bin/bash
#判斷更新包是否遺漏
DATA=/data
client_all="$DATA/agent-client.tgz  $DATA/manager-client.tgz  $DATA/merchant-client.tgz  $DATA/online-client.tgz  $DATA/partner-client.tgz"
client="`find  $DATA -name "*-client.tgz"`"

if [ "$1" = "client" ];then
	for file_all in $client_all
	do
    	stats=0
		sum=0
    	for file_client in $client
    	do
        	if [ "$file_all" == "$file_client" ];then
            	stats=1
            	break
            	return $stats
        	fi
    	done
		sum=$[ $sum + $stats ]
		
    	if [ "$stats" == 1 ];then
        	echo -e "\033[36m $file_client 已存在 \033[0m"    
    	else
        	echo -e "\033[31m $file_all 不存在 \033[0m"
    	fi
	done
	if [ "$sum" < 5 ];then             #5個更新包,有一個包不存在,則sum會小於5,直接不更新
		break
	else
		具體更新操作
	fi
fi
$1		

說明:

其實是兩個集合的比較判斷,類似求兩集合的差集,雙迴圈判定更新包是否存在。若全部存在,則進行更新;否則不更新,同時提示遺漏的更新包。


相關文章