androidプロジェクト構成マクロを単一の独立したxmlファイルにエクスポートするためのshellスクリプト

4325 ワード

androidプロジェクト構成マクロを単一の独立したxmlファイルにエクスポートするためのshellスクリプト
最近、androidプロジェクトのプロジェクトプロファイルのマクロファイルを作業でエクスポートする必要があるため、プロジェクトプロファイルの内容は以下の通りです.
GEMINI=yes
GOOGLE_RELEASE_RIL=no
HAVE_AACENCODE_FEATURE=yes
HAVE_AEE_FEATURE=yes
HAVE_APPC_FEATURE=no
HAVE_AWBENCODE_FEATURE=yes
HAVE_CMMB_FEATURE=no
HAVE_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=0
FN_EXEC_RESULT_SUCCESS=0
FN_EXEC_RESULT_ERR=1

# orginal project config file
SRC_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 ] ; then
		echo " 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 parameters
function fn_print_global_params()
{
	echo -e "
fn_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 "
fn_filter_special_LINE..." if [[ "${YES_OR_NO}" == "yes" ]]; then echo "${YES_OR_NO} == yes" sed -n '/yes\|YES/s/\([^=]\+\).*/\L\1/p' ${SRC_FILE_NAME} > ${DST_FILE_NAME} elif [[ "${YES_OR_NO}" == "no" ]]; then echo "${YES_OR_NO} == no" sed -n '/no\|NO/s/\([^=]\+\).*/\L\1/p' ${SRC_FILE_NAME} > ${DST_FILE_NAME} else fn_exit ${FN_EXEC_RESULT_ERR} fi fn_check_error } # read every LINE and process function fn_while_read_LINE() { echo -e "
fn_while_read_LINE..." cat ${DST_FILE_NAME} | while read LINE do echo "$LINE" fn_process_LINE_items $LINE : done } # process every LINE function 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 file function 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 "
========================Start...========================
" date if [ $# != 1 ];then echo "ERR: U must input one parameter: yes or no. Exit!" fn_exit ${FN_EXEC_RESULT_ERR} else YES_OR_NO=${1} fi fn_print_global_params fn_filter_special_LINE fn_while_read_LINE echo -e "
========================End! ========================
"

上記のスクリプトの中で最も重要なのはこの文で、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