一个用于导出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















更多相关文章

  1. android中获取项目的版本信息
  2. 【转】Android(安卓)jar resource 资源文件的获取
  3. 输入包名生成android应用demo的实现
  4. Android--如何将android studio项目转换成eclipse
  5. Android(安卓)使用NDK R5开发JNI应用详解
  6. 电脑导出文件到手机 adb push
  7. Android开发周报:Android(安卓)Studio2.0发布、Activity动态创建
  8. android实战项目五做一个倒计时的button
  9. Android(安卓)kotlin网络请求框架fuel(简单方便的使用,提供项目中

随机推荐

  1. mysql 5.5.27 winx64安装配置方法图文教
  2. mysql 8.0.22 winx64安装配置方法图文教
  3. mysql 8.0.22 下载安装配置方法图文教程
  4. MySQL 各个索引的使用详解
  5. MySQL的查询缓存和Buffer Pool
  6. 浅析MySQL的基数统计
  7. MySQL数据库基于sysbench实现OLTP基准测
  8. mysql 递归查找菜单节点的所有子节点的方
  9. Mysql sql慢查询监控脚本代码实例
  10. 详解 MySQL的FreeList机制