【Tiptop ERP T】Tiptop GP與系統部署有關的Shell rebuild解析

本文深入解析了GP系统的Shell脚本,特别是rebuild脚本的工作原理,涵盖了标准模块和定制模块的4GL到42M的编译过程、42M到42R的链接过程以及PER到42F的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

探究GP系統運作,現將個人對GP系統中的各種Shell的理解解析如下,供參考!
所有說明都依 Topprod GP Server 正式區為例

rebulid:重新部署Tiptop GP系統所有各個模組---------------------------------------------------------------

此Shell有點複雜,看著別暈喲,主要是中途會有處理很多文件

A、rebuild路徑

/u1/topprod/tiptop/ds4gl2/bin

B、rebuild Shell解析

###### # Rebuild TIPTOP package # Modify.........: 08/11/14 FUN-8B0061 alexstar Compile TIPTOP relational tools # Modify.........: 09/03/23 FUN-930135 alex add p_dbbackup # Modify.........: 09/03/26 FUN-930157 alex adjust cp after rm process # Modify.........: 09/04/03 FUN-940015 ELLE adjust link # Modify.........: 09/03/26 FUN-940130 alex adjust link ###### umask 000 #umask先將該rebuild shell腳本執行過程創建的文件默認權限設為777 # trap ' ' 2 #雖然該行注釋不執行,還是解釋一下:trap表示忽略信令。trap 2表示該rebuild shell執行過程中忽略2號信令Ctrl+\ CURRDIR=`pwd` #pwd命令取當前路徑值賦給局部變數CURRDIR,之後有些操作不在當前路勁下以便跳回來 #--- Compile TIPTOP Source File (4gl - > 42m) ------------------------------ #compile函數主要將GP標準模組下的4GL程式編譯成42m compile() #定義函數compile { for d in $systems #迴圈gener_sys函數取得的GP標準模組名字$systems do echo '====== ('$d') ======' cd $TOPDIR/$d/4gl \rm -f ../42m/*.42m \rm -f rebuild.rc ms_codeset=`locale charmap | cut -d. -f1 | cut -d\" -f2 ` #取當前GP Server上的字符編碼 case ${ms_codeset} in BIG5|big5) lang='big5' ;; GB2312|GBK|GB18030|gb18030) lang='gb' ;; UTF-8|utf-8|utf8) lang='utf8' ;; esac #一下case處理:如果for迴圈處理的模組名為lib或qry或azz則將$DS4GL/bin/對應語言別下的固定42m檔mv到相應的GP模組下的42m路徑中 case $d in lib) cp -rf $DS4GL/bin/$lang/lib_cl_cmdrun.42m $LIB/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/lib_cl_contview.42m $LIB/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/lib_cl_err3.42m $LIB/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/lib_cl_hashkey.42m $LIB/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/lib_cl_qbe.42m $LIB/42m/. 2>/dev/null ;; qry) cp -rf $DS4GL/bin/$lang/qry_q_contview.42m $QRY/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/qry_q_contview2.42m $QRY/42m/. 2>/dev/null ;; azz) cp -rf $DS4GL/bin/$lang/azz_p_go.42m $AZZ/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/azz_p_callback.42m $AZZ/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/azz_p_dbbackup.42m $AZZ/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/azz_p_lang_s.42m $AZZ/42m/. 2>/dev/null cp -rf $DS4GL/bin/$lang/azz_p_keycert.42m $AZZ/42m/. 2>/dev/null ;; esac #一下處理請參閱complie_c函數中的注解,完全一樣的處理過程 touch rebuild.rc fgl=`ls | grep '\.4gl$' | sed -e 's/\.4gl//'` for i in $fgl do $RC $i >x1 2>x2 if [ $? -ne 0 ] ; then head -n 1 x1 cat x2 echo "${i}.4gl" >> rebuild.rc else head -n 1 x1 fi cat x1 x2 >>x3 cat x2 >>x4 done \rm -f x1 x2 export TEMPDIR=$TOP/tmp #Add by alexstar #====== ERROR LIST ====== echo '====== ('$d') [4gl]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [4gl]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [4gl]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rc | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rc >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all #將x3中記錄的所有操作日誌都追加到$TEMPDIR/rebuild.all文件中 cat x4 >> $TEMPDIR/rebuild.err #將x4中記錄的失敗操作日誌都追加到$TEMPDIR/rebuild.err文件中 #因此如果有重新編譯GP模組如鼎新幫我們做版本更新則可以從上述文件中看到編譯文件的操作日誌 echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rc \rm -f x3 x4 #日誌已經記錄到歸總文件裏面,所以此處的x3與x4也可以一併同時刪除了 done } #--- Compile TOPCUST Source File (4gl - > 42m) ------------------------------ #compile_c函數主要將GP客制模組下的4GL程式編譯成42m compile_c() { for d in $systems_c #迴圈cust_sys函數中得到的客制模組$systems_c do echo '====== ('$d') ======' #顯示當前在處理的是哪個客制模組 cd $CUSTDIR/$d/4gl #跳到該客制模組的4gl路勁下 \rm -f ../42m/*.42m #先刪除該客制模組下42m路徑下的所有42m檔 \rm -f rebuild.rc #同樣先刪除4gl路勁下的rebuild.rc文件 touch rebuild.rc #再重新新建一個rebuild.rc文件 fgl=`ls | grep '\.4gl$' | sed -e 's/\.4gl//'` #將4gl路勁下的所有4gl程式去掉後綴名將值賦給fgl即fgl=axmp411 axmp865 axmt620這樣的形式 #sed命令選項說明 -e:允許多項編輯,s:替代.上面的sed命令表示將grep的結果每一項都去掉末尾的.4gl字符 for i in $fgl do $RC $i >x1 2>x2 #r.c2編譯該4gl文檔,結果重定向x1文件,如果錯誤則錯誤重定向x2文件 if [ $? -ne 0 ] ; then #如果執行r.c2執行狀態不成功 head -n 1 x1 cat x2 #終端打印x2文件中的錯誤信息 echo "${i}.4gl" >> rebuild.rc #并將編譯出錯的4gl文件名追加重定向至rebuild.rc文件中 else head -n 1 x1 #如果r.c2成功,則取x1文件中的第1行內容 fi cat x1 x2 >>x3 #不管r.c2成功與失敗都將x1與x2這些記錄日誌重定向追加到x3文件中 cat x2 >>x4 #同時將x2中的錯誤信息追加到x4文件中 done \rm -f x1 x2 #做完這些將x1與x2文件都刪除掉 #====== ERROR LIST ====== echo '====== ('$d') [4gl]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [4gl]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [4gl]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rc | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rc >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all #將x3中記錄的所有操作日誌都追加到$TEMPDIR/rebuild.all文件中 cat x4 >> $TEMPDIR/rebuild.err #將x4中記錄的失敗操作日誌都追加到$TEMPDIR/rebuild.err文件中 #因此如果有重新編譯GP模組如鼎新幫我們做版本更新則可以從上述文件中看到編譯文件的操作日誌 #[1]、參閱後面[1]:ERROR LIST 文件說明 echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rc \rm -f x3 x4 #日誌已經記錄到歸總文件裏面,所以此處的x3與x4也可以一併同時刪除了 done } #----- Linking TIPTOP Application (42m -> 42r) ----------------------------- #link函數主要將GP標準模組下的42m鏈結成42r link() { if [ "$rgx" = "all" ] ; then echo '====== (r.l2) ======' r.l2 lib r.l2 sub r.l2 qry r.l2 p_dbbackup #FUN-940130 r.l2 p_go #add by alexlin r.l2 p_keycert #FUN-940130 fi for d in $systems do echo '====== ('$d') ======' #FUN-940015 if [ "$d" = "lib" -o "$d" = "sub" -o "$d" = "qry" ] ; then r.l2 $d 1>/dev/null 2>>rebuild.rl else # if [ -d $TOPDIR/$d/4gl ] ; then cd $TOPDIR/$d/4gl ln=`ls *.4gl | cut -d . -f1` \rm -f rebuild.rl touch rebuild.rl for i in $ln do $RL $i >x1 2>x2 if [ -s x2 ] ; then head -n 2 x1 cat x2 echo "${i}.42r wasn't be produced." >> rebuild.rl else head -n 2 x1 fi cat x1 x2 >>x3 cat x2 >>x4 done if [ $d -eq "azz" ];then #add by alexlin r.l2 p_dbbackup #FUN-940130 r.l2 p_go #add by alexlin r.l2 p_keycert #FUN-940130 fi \rm -f x1 x2 #====== ERROR LIST ====== echo '====== ('$d') [link]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [link]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [link]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rl | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rl >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all cat x4 >> $TEMPDIR/rebuild.err echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rl \rm -f x3 x4 fi done } #----- Linking TIPTOP Application (42m -> 42r) ----------------------------- #link_c函數主要將GP客制模組下的42m鏈結成42r link_c() { if [ "$rgx" = "all" ] ; then echo '====== (r.l2) ======' r.l2 lib r.l2 sub r.l2 qry r.l2 p_dbbackup #FUN-940130 r.l2 p_go #add by alexlin r.l2 p_keycert #FUN-940130 fi for d in $systems_c do echo '====== ('$d') ======' if [ -d $CUSTDIR/$d/4gl ] ; then cd $CUSTDIR/$d/4gl ln=`ls *.4gl | cut -d . -f1` \rm -f rebuild.rl touch rebuild.rl for i in $ln do $RL $i >x1 2>x2 if [ -s x2 ] ; then head -n 2 x1 cat x2 echo "${i}.42r wasn't be produced." >> rebuild.rl else head -n 2 x1 fi cat x1 x2 >>x3 cat x2 >>x4 done if [ $d -eq "azz" ];then #add by alexlin r.l2 p_dbbackup #FUN-940130 r.l2 p_go #add by alexlin r.l2 p_keycert #FUN-940130 fi \rm -f x1 x2 #====== ERROR LIST ====== echo '====== ('$d') [link]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [link]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [link]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rl | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rl >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all cat x4 >> $TEMPDIR/rebuild.err echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rl \rm -f x3 x4 fi done } #--- Compile TIPTOP Form File (per -> 42f) --------------------------------- #form函數主要將GP標準模組下的per編譯成42f form() { for d in $systems do echo '====== ('$d') ======' cd $TOPDIR find . -name grep -exec \rm -rf {} \; cd $TOPDIR/$d/per \rm -f ../42f/*.42f \rm -f rebuild.rf touch rebuild.rf per=`ls | grep '\.per$' | sed -e 's/\.per//'` for i in $per do $RF $i >x1 2>x2 if [ $? -ne 0 ] ; then head -n 1 x1 cat x2 echo "${i}.per" >> rebuild.rf else head -n 1 x1 fi cat x1 x2 >>x3 cat x2 >>x4 done \rm -f x1 x2 #====== ERROR LIST ====== echo '====== ('$d') [per]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [per]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [per]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rf | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rf >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all cat x4 >> $TEMPDIR/rebuild.err echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rf \rm -f x3 x4 done } #form_4fd函數主要將GP標準模組下的4fd編譯成42f form_4fd() { for d in $systems do echo '====== ('$d') ======' cd $TOPDIR find . -name grep -exec \rm -rf {} \; cd $TOPDIR/$d/4fd \rm -f ../42f/*.42f \rm -f rebuild.rf touch rebuild.rf #ffd =`ls | grep '\.4fd$' | sed -e 's/\.4fd//'` for i in `ls | grep '\.4fd$' | sed -e 's/\.4fd//'` do $RF $i >x1 2>x2 if [ -s x2 ] ; then head -n 1 x1 cat x2 echo "${i}.4fd" >> rebuild.rf else head -n 1 x1 fi #cat x2 cat x1 x2 >>x3 cat x2 >>x4 if [ -s x2 ] ; then \rm x1 x2 fi done \rm -f x1 x2 #====== ERROR LIST ====== echo '====== ('$d') [4fd]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [4fd]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [4fd]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rf | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rf >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all cat x4 >> $TEMPDIR/rebuild.err echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rf \rm -f x3 x4 done } #--- Compile TIPTOP Form File (per -> 42f) --------------------------------- #form_c函數主要將GP客制模組下的per鏈結成42f form_c() { for d in $systems_c do echo '====== ('$d') ======' cd $CUSTDIR find . -name grep -exec \rm -rf {} \; cd $CUSTDIR/$d/per \rm -f ../42f/*.42f \rm -f rebuild.rf touch rebuild.rf per=`ls | grep '\.per$' | sed -e 's/\.per//'` for i in $per do $RF $i >x1 2>x2 if [ $? -ne 0 ] ; then head -n 1 x1 cat x2 echo "${i}.per" >> rebuild.rf else head -n 1 x1 fi cat x1 x2 >>x3 cat x2 >>x4 done \rm -f x1 x2 #====== ERROR LIST ====== echo '====== ('$d') [per]====== ('`date`')' >> $TEMPDIR/rebuild.${acttime}.out echo '====== ('$d') [per]====== ('`date`')' >> $TEMPDIR/rebuild.all echo '====== ('$d') [per]====== ('`date`')' >> $TEMPDIR/rebuild.err echo 'Error List : ('`cat rebuild.rf | wc -l`')' >> $TEMPDIR/rebuild.${acttime}.out cat rebuild.rf >> $TEMPDIR/rebuild.${acttime}.out cat x3 >> $TEMPDIR/rebuild.all cat x4 >> $TEMPDIR/rebuild.err echo ' ' >> $TEMPDIR/rebuild.${acttime}.out \rm -f rebuild.rf \rm -f x3 x4 done } #--- Determine TIPTOP Systems ---------------------------------------------- #gener_sys函數主要取得GP中的標準模組名字 gener_sys() { if [ "$systems" = "all" ] ; then cd $TOPDIR #跳到用戶輸入的GP標準模組目錄下 # systems=`ls -ld a?? g?? |grep '^d' |awk '{print $9}'` #ls -d a?? c?? g??` # No:TQC-810085 systems=`ls -ld a?? g?? c?? c??? |grep '^d' |awk '{print $9}'` #ls -d a?? c?? g??` #上一句Shell如下分解說明: #ls -ld a?? g?? c?? c??? 表示ls -l:表示列出詳細信息,等同與命令ll, -d:表示如果結果是一個目錄,只列出目錄的名稱不列裏面的內容。結果如下形式 #drwxrwxrwx 11 tiptop tiptop 1024 Oct 20 2010 aap #|grep '^d'表示將ls的結果作為grep的輸入塞選出行首字符是d的行,即塞選的結果是只留下是目錄的結果行 #|awk '{print $9}'表示將grep塞選的結果再重定向給awk命令,awk只塞選出第9個字段即模組名字字段aap systems='lib sub qry '$systems #將lib sub qry三個模組與之前得到的$systems值合併就得到了GP所有的模組名字 cd $CURRDIR fi } #--- Determine TOPCUST Systems ---------------------------------------------- #cust_sys函數主要取得GP中的客制模組名字 cust_sys() { #if [ "$systems" = "all" ] ; then # No:TQC-810085 if [ "$systems_c" = "all" ] ; then cd $CUSTDIR #跳到用戶輸入的客制目錄下 systems_c=`ls -d c??? c??` #列出所有GP客制模組的路徑名字將值賦給systems_c.一個?匹配一個字符.因為GP客制模組有的是3個字符有的是4個字符 #systems_c = cap cbg cbm cbx cco ccs cdm cec cem cfa cgap cgfa cggl cgis cgl cgnm cgpm cgpy cgxc cgxr cic cim clib 等 cd $CURRDIR #得到所有GP客制模組的路徑名字后再跳回到當前執行rebuild腳本的所在路徑 fi } #--- Main Section --------------------------------------------------- #rebuild腳本實際從這行開始做事 echo "\n\t\033[7m Rebuild TIPTOP Package \033[m\033[5m Ver 1.0\033[m" echo " -------------------------------------------\n" #提示上2行的信息于終端上 if [[ $# -eq 1 && $1 -eq c ]];then #如果rebuild Shell的位置參數總數只有1個且位置參數$1=c # Modify by No:TQC-810035 start # #輸入路徑信息 echo "\tEnter TIPTOP Directory : \c"; read TOPDIR #等待用戶輸入正式區TIPTOP的路徑 echo "\tEnter TOPCUST Directory : \c"; read CUSTDIR #等待用戶輸入客制區TOPCUST的路勁 #選擇操作 echo " -------------------------------------------" echo " (c) Compile Source Program (4gl -> 42m)" #c選項->編譯4gl檔成42m檔 echo " (l) Link Compiled Programs (42m -> 42r)" #l選項->鏈結42m檔成42r檔 echo " (f) Compile Form File (per -> 42f)\n" #f選項->編譯per檔成42f檔 echo " -------------------------------------------" #提示信息與用戶交流供用戶選擇 #echo "\tEnter Your Choice : \c"; read ans echo "\tEnter Your Choice(c or l or f or clf) : \c"; read ans #提示用戶輸入選擇c或l或f或clf都選,并將選擇值賦給變數ans #選擇要操作的GP模組 echo " -------------------------------------------" echo " Using lowercase letters .ex aoo aim.. etc." #可選擇單一模組,且用戶輸入模組名時要小寫 echo " Typing the word 'all' means all modules.\n" #可選擇操作所有的模組,用戶需要輸入 all echo " -------------------------------------------" echo "\tEnter TIPTOP Systems(all) : \c"; read systems #用戶輸入的GP模組名稱值存入systems變數 echo "\tSelect 0)Exit 1)4J's Genero : \c"; read choice #用戶是否決定操作的選擇入choice變數 # Modify by No:TQC-810035 end # #一下處理:編譯/u1/topprod/tiptop/ds4gl2/bin與/u1/topprod/tiptop/ora/bin路勁下的一些工具類的4gl與per文檔 case $choice in #如果用戶選擇1,即要rebuild 1) RC=r.c2 #搞3個變數賦予相應的操作 RL=r.l2 RF=r.f2 #FUN-8B0061 ---start--- echo "Compiling tools..." rebuild_tool > /dev/null 2>&1 #調用rebuild腳本同路徑下的rebuild_tool腳本,將執行結果輸入到位桶/dev/null。如有錯誤,則錯誤輸入到標準輸出即終端上 #[2]、參閱後面[2]:rebuild_tool Shell解析說明 rebuild_patchtool > /dev/null 2>&1 echo "Tools compiled successfully..." #提示用戶所有的工具類都成功編譯完畢 #FUN-8B0061 ---end--- ;; 0|*) exit #如果用戶選擇0或是其它錯誤選擇則退出rebuild ;; esac acttime=`date +%m%d%H%M` #取當前日期的月日時分值賦給acttime變數。等下要用該變數組出文件名做操作日誌用 #acttime=10261407表示10月26日14點07分 if [ -s $TEMPDIR/rebuild.all ] ; then #刪除2個臨時文件$TEMPDIR/rebuild.all與$TEMPDIR/rebuild.err \rm -f $TEMPDIR/rebuild.all fi if [ -s $TEMPDIR/rebuild.err ] ; then \rm -f $TEMPDIR/rebuild.err fi flag=0 if [ "$systems" = "" ] ; then #如果用戶沒有選擇模組名,則默認rebuild所有的模組 systems=all fi if [ "$systems" = "all" ] ; then rgx='all' fi answer=`echo $ans|cut -c1-1`' '`echo $ans|cut -c2-2`' '`echo $ans|cut -c3-3` #取$ans值即用戶選擇的操作依空格分開賦值給answer for i in $answer do if [ $i = "c" -o $i = "l" -o $i = "f" ] ; then #如果用戶選擇的操作是c或l或f,則執行case語句 flag=1 case $i in c) cust_sys #選擇c則調用4個函數cust_sys compile_c gener_sys compile compile_c gener_sys compile ;; l) cust_sys #選擇l則調用4個函數cust_sys link_c gener_sys link link_c gener_sys link ;; f) cust_sys #選擇f則調用4個函數cust_sys form_c gener_sys form form_c gener_sys form ;; esac else #如果用戶選擇的操作不是c或l或f,則提示非法操作選項 echo "Illegal option: $i" fi done if [ $flag -eq 1 ] ; then #如果變數flag=1即用戶有選擇c或l或f操作,則 echo "" pg $TEMPDIR/rebuild.${acttime}.out #分頁顯示上述操作執行的結果 fi echo "\033[41;5m Use rebuild_chk to check 4gl/42m and per/42f!!!\033[0m" #. $TOP/ora/bin/rebuild_chk # TQC-810035 . $TOP/ds4gl2/bin/rebuild_chk # TQC-810035 #rebuild完後調用$TOP/ds4gl2/bin/rebuild_chk腳本做檢查 else #if語句配對的else,即如果rebuild Shell的位置參數總數不是(只有1個且位置參數$1=c)時 #一下else處理的流程與上面if中的流程一模一樣,下麵只注釋與if塊中有差異的地方 # Modify by No:TQC-810035 start # echo "\tEnter TIPTOP Directory : \c"; read TOPDIR #只需要讀入TIPTOP正式區的路勁 echo " ------------------------------------------" echo " (c) Compile Source Program (4gl -> 42m)" echo " (l) Link Compiled Programs (42m -> 42r)" echo " (f) Compile Form File (per -> 42f)\n" echo " ------------------------------------------" #echo "\tEnter Your Choice : \c"; read ans echo "\tEnter Your Choice(c or l or f or clf) : \c"; read ans echo " ------------------------------------------" echo " Using lowercase letters .ex aoo aim.. etc." echo " Typing the word 'all' means all modules.\n" echo " ------------------------------------------" echo "\tEnter TIPTOP Systems(all) : \c"; read systems echo "\tSelect 0)Exit 1)4J's Genero : \c"; read choice echo "" # Modify by No:TQC-810035 end # case $choice in 1) RC=r.c2 RL=r.l2 RF=r.f2 #FUN-8B0061 ---start--- echo "Compiling tools..." rebuild_tool > /dev/null 2>&1 rebuild_patchtool > /dev/null 2>&1 echo "Tools compiled successfully..." #FUN-8B0061 ---end--- ;; 0|*) exit ;; esac acttime=`date +%m%d%H%M` if [ -s $TEMPDIR/rebuild.all ] ; then \rm -f $TEMPDIR/rebuild.all fi if [ -s $TEMPDIR/rebuild.err ] ; then \rm -f $TEMPDIR/rebuild.err fi flag=0 if [ "$systems" = "" ] ; then systems=all fi if [ "$systems" = "all" ] ; then rgx='all' fi answer=`echo $ans|cut -c1-1`' '`echo $ans|cut -c2-2`' '`echo $ans|cut -c3-3` for i in $answer do if [ $i = "c" -o $i = "l" -o $i = "f" ] ; then flag=1 #此處與if塊中的處理調用的函數少了2個cust_sys compile_c,因為不做客制區 case $i in c) gener_sys compile ;; l) gener_sys #此處與if塊中的處理調用的函數少了2個cust_sys link_c,因為不做客制區 link ;; f) gener_sys #此處與if塊中的處理不一樣 type gsform|grep 'not' >>/dev/null if [[ $? -ne 0 ]] ; then #如果找不到gsform類型,即沒有gsform程式,則調用from_4fd函式 form_4fd else #否則調用form函式 form fi ;; esac else echo "Illegal option: $i" fi done if [ $flag -eq 1 ] ; then echo "" pg $TEMPDIR/rebuild.${acttime}.out fi echo "\033[41;5m Use rebuild_chk to check 4gl/42m and per/42f!!!\033[0m" #. $TOP/ora/bin/rebuild_chk # TQC-810035 . $TOP/ds4gl2/bin/rebuild_chk # TQC-810035 fi

[1]:ERROR LIST 文件說明:


[2]:rebuild_tool Shell解析說明

#!/bin/ksh #Modify: 2008/03/10 FUN-830036 By alexstar #Modify: 2008/11/14 FUN-8B0058 By alexstar compile all patchtools fun_refresh_tools() #FUN-8B0058 #定義fun_refrech_tools函數 { echo "$1"|grep -q '\.4gl$' #echo顯示傳進來的file文件名grep選出依.4gl結尾的文件 if [ "$?" -eq 0 ] ;then #如果grep退出的狀態是0表示成功 fglcomp $1 #則編譯4gl文檔fglcomp $1 if [ "$?" -eq 0 ]; then #如果編譯成功 fgl2p -o `basename $1 .4gl`.42r `basename $1 .4gl`.42m else #則fgl2p鏈接42m檔成相同文件名.42r檔 echo error : $file compile failed! fi else #否則表示是per檔 fglform $1 #則fglform編譯per檔 fi } echo "Tool Rebuild start,please wait..." #FUN-830033 #顯示信息 echo "" FGLDIR=`echo $FGLDIR|cut -d . -f1`.dev;export FGLDIR #FUN-8B0058 #將/u1/genero.dev值賦給變數FGLDIR cd $TOP/ds4gl2/bin #跳轉路徑至$TOP/ds4gl2/bin下 echo In `pwd` ... #FUN-830033 #一下FOR迴圈找4gl與per文檔,且該文檔名最後一個字母不是T for file in *[!T].4gl *[!T].per #FUN-830033 #FUN-8B0058 do if [ "$file" = "r.f2.per" ]; then #如果file是r.f2.per則跳過,因為這個文件是shell腳本不是per文檔 continue fi fun_refresh_tools $file #FUN-8B0058 #調用函數fun_refresh_tools函數編譯$file文件 done if [ -e "$TOP/ora" ]; then #FUN-830033 #如果存在$TOP/ora路勁 cd $TOP/ora/4gl #則跳轉到$TOP/ora/4gl路勁下 echo In `pwd` ... for file in *[!T].4gl #同上編譯該路徑下的4gl工具類4gl程式 do fun_refresh_tools $file #FUN-8B0058 mv "`basename $file .4gl`.42m" ../42m/ #將編譯ok的42m檔 mv到$TOP/ora/42m路徑下 mv "`basename $file .4gl`.42r" ../42m/ #將鏈結ok的42r檔也mv到$TOP/ora/42m路徑下 done fi #cd $TOP/bin/C #FUN-830033 mark #echo "[ $TOP/bin/C ]:" #for file in dtcput.c dtcget.c readstr.c #do # echo $file # cc -o `basename $file .c` $file # cp `basename $file .c` ../ #done echo "" echo "Tool Rebuild complete!" #FUN-830033

-------------------- overrebuild重新部署tiptopGP系統各模組Shell指令完畢!

與Tiptop GP與系統部署有關的Shell rebuild解析就介紹到這裡!

r.f2 r.gf r.c2 r.l2 exe2 r.r2 r.d2+ udm7 loadx unloadx createdb rebuild

至此,關於Tiptop GP 系統客制開發有關的HP-UNIX Linux就全部介紹完了

希望對朋友們有所幫助,歡迎交流指正!

轉載請注明CSDN李藝輝博客專欄http://blog.csdn.net/yihuiworld

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值