当前位置:编程学习 > 网站相关 >>

嵌入式中程序升级,使用ftp shell脚本,方式

这个脚本是两年前写的,基本原理是ftp服务器端有个文件列表,客户端定时把文件列表下载下来,校验一下本地文件与升级服务器上的文件是否一致,如果不一致则升级。
服务器端的文件列表
大概如下
count = 1
01=MD5=ftp路径=设备存放路径。
 
注意!看脚本是先看一下定义,然后从下往上看。
 
#!/bin/sh
#升级目录在 /update 中
#升级目录在 /update/list.ini 服务器上列表
#升级目录在 /update/list.ini_bak 服务器上列表备份
#升级目录在 /update/loc_list.int 本地文件列表
#升级目录在 /update/update_list.ini 升级文件列表
#升级目录在 /update/down/ 为升级的文件夹 保存所有下载的文件
 
 
#ip port folder 90.0.17.35 21 tgr20
#rm -rf /update/*
 
 
ftp_name="tgr20"
ftp_passwd="tgr20"
#ip=$1
#port=$2
#folder=$3
#list="list.ini"
#ftp_url="ftp://$ip:$port/"
#echo $ftp_url
#if [ $# == 3 ]
#then
#ftp_url="$ftp_url$folder/"
#fi
list="list.ini"
mkdir -p "/update"
folder="tgr20/"
ftp_url="$1/$folder"
ftp_url_para="/update/ftp_url_para"
ver="cur_ver"
if [ $# == 0 ]
then
ls $ftp_url_para > /dev/null
if [ $? != "0" ]
then
exit 0
fi
ftp_url=`cat $ftp_url_para`
fi
echo $ftp_url > $ftp_url_para
echo "url=$ftp_url"
ftp_list="$ftp_url$list"
sev_list="/update/$list"
sev_list_bak=$sev_list"bak"
loc_list="/update/loc_$list"
ftp_ver="$ftp_url$ver"
loc_ver="/usr/bin/$ver"
 
 
 
 
#ftp_file loc_file
update_list="/update/update_list.ini"
down_status="/update/status"
net_status="/update/net_status"
log="/update/log"
root_folder="/update/down"
mkdir -p $root_folder
 
 
#下载状态
#如果网络ok 0
#如果网络fail 1
#文件校验失败 2
file_value1="/update/value1"
check_fail_times="3"
 
 
 
 
 
 
#判断当前状态
#如果当前状态 检测中 0
#如果当前状态 下载中 1
#如果当前状态 校验中 2
#如果当前状态 拷贝中 3
 
 
#
fun_init_system()
{
echo "0" > down_status
echo "0" > net_status
echo "0" > file_value1
rm -rf $root_folder
rm $update_list
rm $sev_list
rm $sev_list_bak
}
 
 
# ftp_src loc_dest 
fun_ftp_get()
{
mkdir -p `dirname $2`
#wget -c --retry-connrefused -t 0 -T 5 -O /home/jerry/1234.ini  ftp://90.0.17.250:21/list.ini
#wget -c --user=$ftp_name --password=$ftp_passwd --retry-connrefused -t 0 -T 5 -O $2 $1
ret=`wget -c -T 30 -O $2 $1`
return ret
 
 
}
 
 
#下载服务器文件列表
fun_down_sev_file_list()
{
rm -rf $sev_list
fun_ftp_get $ftp_list $sev_list
# md51='md5sum' $sev_list
# rm -rf $sev_list_bak
# cp $sev_list $sev_list_bak
}
#获取本地文件列表
fun_down_loc_file_list()
{
rm -rf $loc_list
# md5sum /bin_jerry/* >> $loc_list
md5sum /usr/bin/* >> $loc_list
md5sum /usr/lib/* >> $loc_list
md5sum /lib/modules/2.6.33/* >> $loc_list
}
#比较是否需要升级
#检测列表是否有更新 1 有升级 0 没有升级
# src dest md5 mode
fun_compare_list()
{
#生成需要下载的文件列表
echo "0" > $file_value1
rm -rf $update_list
cat $sev_list | while read line
do
set word1 word2 word3 word4
set $line
src=$1
dest=$2
md5=$3
mode=$4
new_file="$src $root_folder$dest $md5 $mode"
cat $loc_list | while read line
do
# md5 app
set word5 word6
set $line
if [ $2 == $dest -a  $1 == $md5 ]
then
echo "1" > $file_value1
break 
fi 
done 
tmp=`cat $file_value1`
if [ $tmp == 0 ]
then
echo $new_file >> $update_list
fi 
echo "0" > $file_value1
done 
ls $update_list
if [ "$?" -eq "0" ]
then
echo "********************compare_result_update***************************"
return 1
fi
return 0
}
 
 
#拷贝文件
# src dest md5 mode
fun_copy_file()
{
cat $1 | while read line
do
set word1 word2 word3 word4
set $line
echo $2
echo $root_folder
# a=${a:0:32}
full_path=$2
dest_path=${full_path#$root_folder}
rm -rf $dest_path
cp -rf $2 $dest_path
done 
rm -rf $root_folder
echo "0" > $down_status
echo "______________________reboot_system______________________"
reboot
}
#md5校验
#file_name value
#0:ok 1:fail
fun_md5sum()
{
md5=`md5sum $1`
md5=${md5:0:32}
if [ $md5 == $2 ]
then
return 0
fi
return 1
}
#校验文件
# src dest md5 mode
fun_check_file()
{
echo "____________fun_check_file = $1 __________________________"
cat $1 | while read line
do
set word1 word2 word3 word4
set $line
times=0
while true;
do
fun_md5sum $2 $3
if [ "$?" == "0" ]
then
echo "check ok"
break
fi
rm -rf $2
fun_ftp_get $ftp_url$1 $2
#网络校验fail
echo "1" > $net_status
times=$((times+1))
if [ $times == $check_fail_times ]
then
fun_init_system
echo "check fail 3 return "
return 0
fi
 
 
done
done
status=`cat $net_status`
echo "netstatus = $status"
if [ $status == "0" ]
# if [ $status == "0" -o $status == "2" ]
then
echo "3" > $down_status
 
echo "start copy file..."
fun_copy_file $update_list
fi
}
 
 
#开始下载文件补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,