一个用于导出android项目配置宏为单个独立xml文件的shell脚本

来源:互联网 发布:淘宝鞋店装修模板 编辑:程序博客网 时间:2024/06/04 18:19

一个用于导出android项目配置宏为单个独立xml文件的shell脚本

最近由于工作需要将android项目的项目配置文件里面的宏文件导出来,项目配置宏文件内容如下所示:

GEMINI=yesGOOGLE_RELEASE_RIL=noHAVE_AACENCODE_FEATURE=yesHAVE_AEE_FEATURE=yesHAVE_APPC_FEATURE=noHAVE_AWBENCODE_FEATURE=yesHAVE_CMMB_FEATURE=noHAVE_GROUP_SCHEDULING=no

现在需要将这些宏导出来,由大写字母改成小写字母,类似于如下的xml文件格式:

<?xml version="1.0" encoding="utf-8"?><permissions><feature name="mtk_fm_recording_support" /></permissions>

由于项目配置文件里面的宏很多,手工操作非常麻烦,而且扩展性很不好,因此需要shell脚本使操作自动化,编写出来的脚本文件如下:

#!/bin/bash##Description:#Used to export the ProjectConfig.mk items to different xml files.##History:#tcpipstack, Oct.,29th, 2012, created it.#tcpipstack, Oct.,30th, 2012, modified for add the read LINE and process it.##--------------------------------------------------------------------------------------------DATE=`date +%F-%H`#FN_EXEC_RESULT=0FN_EXEC_RESULT_SUCCESS=0FN_EXEC_RESULT_ERR=1# orginal project config fileSRC_PRJ_CFG_FILE=/work/code/linux/shell/PrjCfgExportXml/ProjectConfig.mk# destination project config file.DST_PRJ_CFG_FILE=/work/code/linux/shell/PrjCfgExportXml/Dst_PrjCfg.mk#SRC_FILE_NAME=${SRC_PRJ_CFG_FILE}DST_FILE_NAME=${DST_PRJ_CFG_FILE}#--------------------------------------------------------------------------------------------# if unexpect event happens, it will process here.function fn_check_error() {echo "fn_check_error..."exit=$?echo "exit = ${exit}"if [ ${exit} != 0 ] ; thenecho " Error code ${exit}"fn_exit ${exit};fi}# sub function exit with error code.function fn_exit(){local fn_exit_code=${1}exit ${fn_exit_code}}# print the global parametersfunction fn_print_global_params(){echo -e "\nfn_print_global_params..."echo "--------YES_OR_NO:${YES_OR_NO}"}# filter LINEs include the string of yes or no.function fn_filter_special_LINE(){echo -e "\nfn_filter_special_LINE..." if [[ "${YES_OR_NO}" == "yes" ]]; thenecho "${YES_OR_NO} == yes"sed -n '/yes\|YES/s/\([^=]\+\).*/\L\1/p' ${SRC_FILE_NAME} > ${DST_FILE_NAME}elif [[ "${YES_OR_NO}" == "no" ]]; thenecho "${YES_OR_NO} == no" sed -n '/no\|NO/s/\([^=]\+\).*/\L\1/p' ${SRC_FILE_NAME} > ${DST_FILE_NAME}elsefn_exit ${FN_EXEC_RESULT_ERR}fifn_check_error}# read every LINE and process function fn_while_read_LINE(){echo -e "\nfn_while_read_LINE..."cat ${DST_FILE_NAME} | while read LINEdoecho "$LINE"fn_process_LINE_items $LINE:done}# process every LINEfunction fn_process_LINE_items(){echo "fn_process_LINE_items: ${1}"local CFG_ITEM=${1}fn_write_cfg_2_xml ${CFG_ITEM}}# write the project config information to xml filefunction fn_write_cfg_2_xml(){echo "fn_write_cfg_2_xml: ${1}"local XML_FILE_NAME=${1}echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > ${XML_FILE_NAME}echo "<permissions>" >> ${XML_FILE_NAME}echo "<feature name=\"${1}\" />" >> ${XML_FILE_NAME}echo "</permissions>" >> ${XML_FILE_NAME}mv ${XML_FILE_NAME} ${XML_FILE_NAME}.xml}#--------------------------------------------------------------------------------------------echo -e "\n========================Start...========================\n"dateif [ $# != 1 ];thenecho "ERR: U must input one parameter: yes or no. Exit!"fn_exit ${FN_EXEC_RESULT_ERR}elseYES_OR_NO=${1}fifn_print_global_paramsfn_filter_special_LINEfn_while_read_LINEecho -e "\n========================End! ========================\n"


上述脚本里面最关键的就是这条语句,参考sed的用法可以参考这篇博客:http://blog.csdn.net/tcpipstack/article/details/8125819:


sed -n '/yes\|YES/s/\([^=]\+\).*/\L\1/p' ${SRC_FILE_NAME} > ${DST_FILE_NAME}


使用方法,在终端上输入如下:

bash prj_cfg_export_xml.sh yes/no















原创粉丝点击