shell 脚本批量替换 android 盒子 里面的文件
前提
我们每个项目上可能需要同时给几百个终端更换多个文件,以前量级你比较小,可以手动更换,但是大批量的更换费时费力;有时候会在生产环境中更换,就更为麻烦,所有就想通过
shell 脚本 + adb platform-tools 自动进行文件替换。
思路
见下面的流程图:
原理讲解:
首先将所有的ip都存储到一个文件中:DEVICESIP,我这里建立了三个目录:
log:存放操作日志,打印出执行过程,以及执行不成功的结果码解释
faliure:将因为各种原因没有替换成功的 ip 写到 failure 中
success:将替换成功的ip写到 success 中去
等所有的IP地址都已经写完之后,将原有的IP地址文件加上当前的日期编程日志文件。将failure文件替换成 DEVICESIP 文件,这样后面就不会多次替换文件了。
下面直接上代码(最终版的代码后面会附上):
#!/bin/sh
SuLog=/home/kuntai/success/success.txt
FaLog=/home/kuntai/failure/failure.txt
UpdateLog=/home/kuntai/log/update.log
IPLIST=/home/kuntai/DeviceIP.txt
echo "begin for update"
for ip in `cat $IPLIST`;
do
ping $ip -c 1 -w 2
pingFlag=$?
if [ $pingFlag -ne 0 ];then
echo "$ip">>$FaLog
echo "$ip:`perror $pingFlag`" >> $UpdateLog
continue
fi
t=`md5sum /home/kuntai/libswlux.so`
t=${t% *}
echo $t
killall -9 adb
adb connect $ip
if [ $? -ne 0 ];then
echo "failure"
echo "$ip">>$FaLog
echo "first connect $ip:`perror $?`" >> $UpdateLog
adb disconnect
continue
else
echo "success"
adb root
rootFlag=$?
if [ $rootFlag -ne 0 ];then
echo "$ip">>$FaLog
echo "root $ip:`perror $pingFlag`">>$UpdateLog
adb disconnect
continue
fi
adb connect $ip
sleep 3
connectFlag=$?
if [ $connectFlag -ne 0 ];then
echo "$ip">>$FaLog
echo "connect $ip :`perror $connectFlag`">>$UpdateLog
adb disconnect
continue
fi
adb remount
sleep 3
remountFlag=$?
if [ $remountFlag -ne 0 ];then
echo "$ip">>$FaLog
echo "remount $ip :`perror $pingFlag`" >>$UpdateLog
adb disconnect
continue
fi
#目前我们已经有root和读写权限
m=`adb shell md5sum /system/lib/libswlux.so`
#mp=${m:0:32}
m=${m% *}
echo "盒子$ip文件MD5= $m"
echo "服务器MD5= $t"
echo $m
echo $t
if [ $m = $t ];then
adb shell echo "md5相同,文件未发生改变" >> $UpdateLog
else
adb push /home/XXXX/XXXX /XXX/XX/
if [ $? -ne 0 ]; then
echo $ip >> $FaLog
adb disconnect
continue
else
echo "`date +'%Y%m%d %H:%M:%S'`: $ip" >> $SuLog
mt=`adb shell md5sum /system/lib/libswlux.so`
echo $mt >> $SuLog
echo $mt >> $UpdateLog
fi
fi
fi
adb kill-server
adb start-server
killall -9 adb
adb disconnect
done
mv $IPLIST "$IPLIST"".`date +'%Y%m%d%H%M%S'`"
cp $FaLog $IPLIST
mv $FaLog "$FaLog"".`date +'%Y%m%d%H%M%S'`"
目前这个脚本有一个问题就是:在替换文件之前没有拿到该文件的权限,替换完成之后也没有给替换的文件授权,有的终端会导致文件错误。