關於clone_mmi.sh腳本簡單解讀

一小段代碼:

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章