一小段代码:
function write_xml()
{
change=${!1}
if [ $change ]; then
if [ $change = "sr_null" ];then
# sed -i "s/\"$control\">.*</\"$control\"></" $path
sed -i "/\"$1\"/s/\">.*</\"></" $path
else
# sed -i "s/\"$control\">.*</\"$control\">$change</" $path
sed -i "/\"$1\"/s/\">.*</\">$change</" $path
fi
echo "$1 = $change"
#else
# echo "$control is not be setted"
fi
}
//“1"代表第一个参数,”${!1}"代表间接引用参数1的值
比如: a = true; c= ${!1},其实表示将a的值间接赋给c, c= true;
if[$change];then 判断是否获取到值
sed -i "/\"$1\"/s/\">.*</\">$change</" $path
sed -i 表示字符串查找并替换
$1表示获取第一个参数
/"$1"/s/">.*< 其实就是参数1之后"><“之间的”.字符","."所有字符
$change</ 获取简介引用的字符并修改到><节点中
if[$change = “sr_null”];then判断获取到的值是否是sr_null,如果是,则替换为空字符串
$path相关修改的文件
总的来说,就是如果参数1的字符串有被赋值,那么就在path路径下找到参数1的字符串,并将参数1后的尖括号中><的字符串替换为赋值的字符串。
那么${!1}这个参数是怎么从projectConfig.mk中获取出来的呢?
我们来看一下makesagereal这个脚本,其中有如下一段:
$prj = "../sagereal/mk/$new_project/ProjectConfig.mk";
open (FILE_HANDLE, "<$prj") or die "cannot open $prj\n";
while (<FILE_HANDLE>)
{
if (/^(\S+)\s*=\s*(\S+)/)
{
$ENV{$1} = $2;
}
}
其实类似我们的HashMap,将value对应的key保存起来,那么在后续的调用中就可以直接获取出来。
modified for default date(2016/11/01)
if [ $default_restore_year ];then
sed -i "/RTC_DEFAULT_YEA/s/RTC_DEFAULT_YEA.*/RTC_DEFAULT_YEA $default_restore_year/" ../alps/mediatek/custom/$base_project/preloader/inc/cust_rtc.h
sed -i "/RTC_DEFAULT_YEA/s/RTC_DEFAULT_YEA.*/RTC_DEFAULT_YEA $default_restore_year/" ../alps/mediatek/custom/$base_project/kernel/rtc/rtc/rtc-mt.h
sed -i "/RTC_DEFAULT_YEA/s/RTC_DEFAULT_YEA.*/RTC_DEFAULT_YEA $default_restore_year/" ../alps/mediatek/custom/$base_project/kernel/rtc/rtc/rtc-mt6575.h
fi
if [ $default_restore_month ];then
sed -i "/RTC_DEFAULT_MTH/s/RTC_DEFAULT_MTH.*/RTC_DEFAULT_MTH $default_restore_month/" ../alps/mediatek/custom/$base_project/preloader/inc/cust_rtc.h
sed -i "/RTC_DEFAULT_MTH/s/RTC_DEFAULT_MTH.*/RTC_DEFAULT_MTH $default_restore_month/" ../alps/mediatek/custom/$base_project/kernel/rtc/rtc/rtc-mt.h
sed -i "/RTC_DEFAULT_MTH/s/RTC_DEFAULT_MTH.*/RTC_DEFAULT_MTH $default_restore_month/" ../alps/mediatek/custom/$base_project/kernel/rtc/rtc/rtc-mt6575.h
fi
if [ $default_restore_day ];then
sed -i "/RTC_DEFAULT_DOM/s/RTC_DEFAULT_DOM.*/RTC_DEFAULT_DOM $default_restore_day/" ../alps/mediatek/custom/$base_project/preloader/inc/cust_rtc.h
sed -i "/RTC_DEFAULT_DOM/s/RTC_DEFAULT_DOM.*/RTC_DEFAULT_DOM $default_restore_day/" ../alps/mediatek/custom/$base_project/kernel/rtc/rtc/rtc-mt.h
sed -i "/RTC_DEFAULT_DOM/s/RTC_DEFAULT_DOM.*/RTC_DEFAULT_DOM $default_restore_day/" ../alps/mediatek/custom/$base_project/kernel/rtc/rtc/rtc-mt6575.h
fi