#/bin/bash data_ADD="./fileinfo.1.db" #总数据库名 data_NEW="./fileinfo.2.db" #新数据库名 merge_LOG="./merge.log" #合并日志 merge_LIST="./merge.list" function set_env(){ if [ -f $merge_LOG ]; then rm $merge_LOG fi if [ -f $merge_LIST ]; then rm $merge_LIST fi } #获取新数据库中镜像信息存入到总数据库中 function get_into_iso(){ data_isomd5=`sqlite3 $data_NEW "select product_md5 from product;"` data_isoname=`sqlite3 $data_NEW "select product_name from product;"` data_isoversion=`sqlite3 $data_NEW "select product_version from product;"` data_isoissue=`sqlite3 $data_NEW "select product_issue from product;"` data_isoid=$(expr `sqlite3 $data_ADD "select product_id from product order by product_id desc limit 1;"` + 1) sqlite3 $data_ADD "insert into product values ($data_isoid,'$data_isoname','$data_isoversion','$data_isomd5','$data_isoissue');" echo "镜像 name:$data_isoname version:$data_isoversion md5:$data_isomd5 issue:$data_isoissue id:$data_isoid" >> $merge_LOG } function get_into_pkg(){ for pkg_list in `sqlite3 $data_NEW "select * from pkg;"` do new_pkg_md5=`echo $pkg_list | awk -F "|" '{print $4}'` pkg_md5=`sqlite3 $data_ADD "select pkg_md5 from pkg where pkg_md5 is '$new_pkg_md5';"` if [ "$new_pkg_md5" != "$pkg_md5" ]; then new_pkg_name=`echo $pkg_list | awk -F "|" '{print $2}'` new_pkg_version=`echo $pkg_list | awk -F "|" '{print $3}'` new_pkg_id=`echo $pkg_list | awk -F "|" '{print $1}'` pkg_id=$(expr `sqlite3 $data_ADD "select pkg_id from pkg order by pkg_id desc limit 1;"` + 1) sqlite3 $data_ADD "insert into pkg values ($pkg_id,'$new_pkg_name','$new_pkg_version','$new_pkg_md5');" #更新product_and_pkg表 local data_papid=$(expr `sqlite3 $data_ADD "select pap_id from product_and_pkg order by pap_id desc limit 1;"` + 1) sqlite3 $data_ADD "insert into product_and_pkg values ($data_papid,$data_isoid,$pkg_id);" echo "安装包 name:$new_pkg_name version:$new_pkg_version md5:$new_pkg_md5 id:$pkg_id papid:$data_papid" >> $merge_LOG echo "$new_pkg_id $pkg_id" >> $merge_LIST #获取新数据库中文件信息,并输入到总数据库中 else pkg_id=`sqlite3 $data_ADD "select pkg_id from pkg where pkg_md5 is '$pkg_md5';"` iso_pkgid=`sqlite3 $data_ADD "select product_id from product_and_pkg where pkg_id = '$pkg_id' and product_id = '$data_isoid';"` #判断是否有向product_and_pkg输入相同的信息 if [ "$data_isoid" == "$iso_pkgid" ]; then echo "相同安装包id为:$pkg_id" >> $merge_LOG else local data_papid=$(expr `sqlite3 $data_ADD "select pap_id from product_and_pkg order by pap_id desc limit 1;"` + 1) sqlite3 $data_ADD "insert into product_and_pkg values ($data_papid,$data_isoid,$pkg_id);" echo "更新product_and_pkg表 papid=$data_papid iso_id=$data_isoid pkg_id=$pkg_id" >> $merge_LOG fi fi done } #获取新数据库中文件信息存入到总数据库中 function get_into_file(){ OLDIFS=$IFS IFS=$'\n' for file_pkg_list in `cat $merge_LIST` do pkg_list=`echo $file_pkg_list | awk '{print $1}'` for file_id in $(sqlite3 $data_NEW "select file_id from file where pkg_id= '$pkg_list';") do data_fileid=$(expr `sqlite3 $data_ADD "select file_id from file order by file_id desc limit 1;"` + 1) data_filename=`sqlite3 $data_NEW "select file_name from file where file_id=$file_id"` data_pkgid=`echo $file_pkg_list | awk '{print $2}'` data_filepath=`sqlite3 $data_NEW "select file_pathname from file where file_id=$file_id"` data_filemd5=`sqlite3 $data_NEW "select file_md5 from file where file_id=$file_id"` data_filetype=`sqlite3 $data_NEW "select file_type from file where file_id=$file_id"` data_fileowner=`sqlite3 $data_NEW "select file_owner from file where file_id=$file_id"` data_filegenus=`sqlite3 $data_NEW "select file_genus from file where file_id=$file_id"` data_filepermis=`sqlite3 $data_NEW "select file_permis from file where file_id=$file_id"` data_filesize=`sqlite3 $data_NEW "select file_size from file where file_id=$file_id"` data_fileacl=`sqlite3 $data_NEW "select file_acl from file where file_id=$file_id"` data_filecap=`sqlite3 $data_NEW "select file_capable from file where file_id=$file_id"` data_filelevel=`sqlite3 $data_NEW "select file_level from file where file_id=$file_id"` data_filemac=`sqlite3 $data_NEW "select file_mac from file where file_id=$file_id"` sqlite3 $data_ADD "insert into file values ($data_fileid,\"$data_filename\",$data_pkgid,\"$data_filepath\",\"$data_filemd5\",\"$data_filetype\",\"$data_fileowner\",\"$data_filegenus\",$data_filepermis,$data_filesize,\"$data_fileacl\",\"$data_filecap\",\"$data_filelevel\",\"$data_filemac\");" echo "文件 id:$data_fileid name:$data_filename pkgid:$data_pkgid newpkgid:$new_pkg_id path:$data_filepath md5:$data_filemd5 type:$data_filetype owner:$data_fileowner genus:$data_filegenus permis:$data_filepermis size:$data_filesize acl:$data_fileacl cap:$data_filecap level:$data_filelevel mac:$data_filemac" >> $merge_LOG done done IFS=$OLDIFS } function main(){ set_env #设置环境 get_into_iso #获取新数据库中镜像信息,并输入到总数据库中 get_into_pkg #获取新数据库中安装包信息,并输入到总数据库中 get_into_file #获取新数据库中文件信息,并如输入到总数据库中 } main