Shell脚本实现线上服务器之间对比文件是否一致
工作中有时需要对比文件是否一致,通过以下脚本可以实现(比较简单):分享出来,希望能帮助到有同样需求的朋友~
#!/bin/bash
#对比服务器上文件是否一样
#Richardshen2012/07/08
LC_ALL='en_US.UTF-8'
basedir=`dirname$0`
HOST=$basedir/host.txt
PASSWD="abcd" #密码
FILE=$basedir/file.txt
LOG=$basedir/tmp.log
>$LOG
[!-f/usr/bin/nc]&&yum-yinstallnc
[!-f/usr/bin/expect]&&yum-yinstallexpect
auto_smart_ssh(){
expect-c"settimeout-1;
spawnssh-oStrictHostKeyChecking=no$2${@:3};
expect{
*assword:*{send--$1\r;
expect{
*denied*{exit2;}
eof
}
}
eof {exit1;}
}
"
# return$?
}
num=0
forfilein`cat$FILE`;do
forhostin`cat$HOST`;do
[[$host=~"^#"]]&&continue
let'num++'
if!/usr/bin/nc-w1$host22>/dev/null;then
echo"sshconnectfailed."|tee-a$LOG
continue
else
echo-e"\e[32m$host($FILE)MD5comparedfiles...\e[0m"
auto_smart_ssh$PASSWDroot@$hostmd5sum$file|grep$file|grep-vStrictHostKeyChecking|tee-a$LOG
fi
done
echo"----------------------------------------------------------"
done
对比的IP地址写入host.txt,需要对比的文件(支持多个文件)写入file.txt
输出结果为:
192.168.113.108(./file.txt)MD5comparedfiles... c84509bb3b109506935dba56b667a136 /data/server/www/apps/ad/fullcollumn.html 192.168.113.111(./file.txt)MD5comparedfiles... c84509bb3b109506935dba56b667a136 /data/server/www/apps/ad/fullcollumn.html ---------------------------------------------------------- 192.168.113.108(./file.txt)MD5comparedfiles... d2c965f5222ff47432313c76863f428d /data/server/www/apps/ad/sky.html 192.168.113.111(./file.txt)MD5comparedfiles... d2c965f5222ff47432313c76863f428d /data/server/www/apps/ad/sky.html