亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于Shell的帶日志執(zhí)行方法

文檔序號:6469307閱讀:271來源:國知局
專利名稱:一種基于Shell的帶日志執(zhí)行方法
技術(shù)領(lǐng)域
本發(fā)明涉及Linux Shell腳本,特別是一種基于Shell的帶日志執(zhí)行 方法。
背景技術(shù)
Shell被廣泛應(yīng)用于Linux/Unix操作系統(tǒng),常用來批處理完成特定 的任務(wù),具有編寫簡單、擴展性靈活性好等優(yōu)點?,F(xiàn)在常用的Shell腳 本執(zhí)行方法中,對腳本的運行及其輸出控制比較單一,要么僅僅能把腳 本的輸出寫入控制臺,要么只能寫入日志文件。
如果腳本的輸出全部都送到控制臺,則用戶很難在繁多的信息中找到 自己所需要的信息,而如果全部輸出到日志文件的話,用戶還得需要去 日志文件中尋找程序的運行信息。這兩種方法都不夠靈活,不能提供給 用戶足夠精簡的有效的控制臺信息。

發(fā)明內(nèi)容
為克服上述已有技術(shù)的不足,本發(fā)明要解決的技術(shù)問題是提供一種 基于Shell的帶日志執(zhí)行方法,使用該方法可以靈活的控制要執(zhí)行的命 令、命令的輸出是否顯示到控制臺以及日志文件。 為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案是
一種基于Shell的帶日志執(zhí)行方法,應(yīng)用于Linux和Unix平臺,該 方法實施依據(jù)的硬件平臺為Linux/Unix所支持的硬件平臺,該硬件平臺 包括CPU、存儲設(shè)備、鍵盤、顯示器,該方法包括如下步驟
步驟一:將She 11執(zhí)行腳本中給定的要輸出的內(nèi)容或者命令字符串放
入一變量中;
步驟二:將所述變量中的內(nèi)容可以根據(jù)不同的參數(shù)選擇是否出到控制
臺,是否在顯示器上顯示出來;
如果該變量中存放的是普通字符串,則轉(zhuǎn)步驟三;如果該變量中存
放的是命令字符串,則轉(zhuǎn)步驟四;
步驟三普通字符串處理模塊處理所述的普通字符串;
步驟四命令字符串處理模塊執(zhí)行所述的命令字符串,并處理命令執(zhí)
行的輸出。
所述的給定的要輸出的內(nèi)容是要輸出的文字信息,存入變量MSG中。 所述的給定的要輸出的內(nèi)容是要執(zhí)行的命令,存入變量CMD中。 所述的基于Shell的帶日志執(zhí)行方法,還包括以下步驟 步驟A:將執(zhí)行的命令的輸出結(jié)果輸出到控制臺,并在顯示器上顯示 出來;
步驟B:將所述命令的輸出結(jié)果記錄到位于存儲器或內(nèi)存中的日志文件中。
所述的基于Shell的帶日志執(zhí)行方法,還包括以下步驟 .步驟a:將腳本執(zhí)行的步驟標題存入變量TITLE中;
步驟b:在全局變量St印中保存每次執(zhí)行的步驟編號;
步驟c:將本次執(zhí)行步驟的編號以及變量TITLE中的字符串顯示到控
制臺供用戶參考,并且將該編號的值增加l。
該方法實施依據(jù)的硬件平臺為x86、AMD、ARM;所述的存儲設(shè)備是NAND Flash、或T-Flash。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是
本發(fā)明帶日志執(zhí)行方法對要執(zhí)行的命令以及命令的輸出進行分類、分 級,可以靈活的控制要執(zhí)行的命令、命令的輸出是否顯示到控制臺以及
日志文件?;诒景l(fā)明,可以方便的實現(xiàn)大型腳本程序的運行與日志跟 蹤,并且在控制臺給出合理的有效的用戶提示。


圖1是本發(fā)明在控制臺和日志文件中同時顯示記錄一段文字的示意圖。
圖2是本發(fā)明在控制臺和日志文件中顯示并記錄執(zhí)行的命令,并把 該命令的輸出內(nèi)容也記錄到控制臺和日志文件中的示意圖。
圖3是本發(fā)明在控制臺中不顯示執(zhí)行的命令,但是顯示該命令執(zhí)行 的輸出信息,同時將程序運行的輸出信息記錄到日志文件中的示意圖。 圖4是本發(fā)明記錄Shell腳本執(zhí)行的步驟編號以及內(nèi)容的示意圖。 圖5是本發(fā)明帶日志執(zhí)行方法對普通字符串處理的流程圖。 圖6是本發(fā)明帶日志執(zhí)行方法對命令字符串處理的流程圖。
具體實施例方式
下面結(jié)合附圖和實施例對本發(fā)明的具體實施方式
做進一步詳細的說
明,但不應(yīng)以此限制本發(fā)明的保護范圍。
本發(fā)明基于Shell的帶日志執(zhí)行方法,應(yīng)用于Linux和Unix平臺,
該方法實施依據(jù)的硬件平臺為Linux/Unix所支持的所有硬件平臺,如
x86、 AMD、 ARM;這些硬件平臺所需要包括的基本硬件為CPU、存儲設(shè)備
(如NAND Flash、 T-Flash等)、鍵盤、顯示器。
該方法包括如下步驟-
步驟一:將Shel 1執(zhí)行腳本中給定的要輸出的內(nèi)容或者命令字符串放 入一變量中;所述的給定的要輸出的內(nèi)容是要輸出的文字信息,存入變 量MSG中。所述的給定的要輸出的內(nèi)容是要執(zhí)行的命令,存入變量CMD 中。
命令字符串會得到執(zhí)行,并在執(zhí)行后輸出一些信息,這些信息相當于
"Shell執(zhí)行腳本中給定的要輸出的內(nèi)容"。
步驟二:將所述變量中的內(nèi)容可以根據(jù)不同的參數(shù)選擇是否出到控制 臺,是否在顯示器上顯示出來;
如果該變量中存放的是普通字符串,則調(diào)用普通字符串處理模塊,調(diào) 用普通字符串處理模塊時傳入兩個控制參數(shù)參數(shù)1、是否將該普通字 符串顯示到控制臺,參數(shù)2、是否將該普通字符串記錄到日志文件,轉(zhuǎn)
如果該變量中存放的是命令字符串,則調(diào)用命令字符串處理模塊,調(diào) 用命令字符串處理模塊時傳入四個控制參數(shù)1、是否將該命令字符串顯 示到控制臺,2、是否將該命令字符串記錄到日志文件,3、是否將該命 令的執(zhí)行結(jié)果顯示到控制臺,4、是否將該命令的執(zhí)行結(jié)果記錄到日志文 件,轉(zhuǎn)步驟四;
步驟三請參閱圖5。普通字符串處理模塊接收到普通字符串之后, 如果參數(shù)1為True,則將該普通字符串顯示到控制臺;如果參數(shù)1為 False,則不對該字符串進行顯示到控制臺的處理;如果參數(shù)2為True, 則將該普通字符串記錄到日志文件;如果參數(shù)2為False,則不對該字 符串進行記錄到日志文件的處理;
步驟四請參閱圖6。命令字符串處理模塊接收到命令字符串之后, 執(zhí)行該命令,并將命令執(zhí)行的輸出做如下處理如果參數(shù)l為True,則 將該命令字符串顯示到控制臺;如果參數(shù)1為False,則不對該命令字 符串進行顯示到控制臺的處理;如果參數(shù)2為True,則將該命令字符串 記錄到日志文件;如果參數(shù)2為False,則不對該命令字符串進行記錄 到日志文件的處理;如果參數(shù)3為True,則將該命令字符串的執(zhí)行結(jié)果 顯示到控制臺;如果參數(shù)3為False,則不對該命令的輸出字符串進行
顯示到控制臺的處理;如果參數(shù)4為True,則將該命令的輸出字符串記
錄到日志文件;如果參數(shù)4為False,則不對該命令的輸出字符串進行
記錄到日志文件的處理;
本發(fā)明基于Shell的帶日志執(zhí)行方法,還包括以下步驟
步驟A:將執(zhí)行的命令的輸出結(jié)果輸出到控制臺,并在顯示器上顯示
出來;
步驟B:將所述命令的輸出結(jié)果記錄到位于存儲器或內(nèi)存中的日志文 件中。
本發(fā)明方法還包括以下步驟
步驟a:將腳本執(zhí)行的步驟標題存入變量TITLE中; 步驟b:在全局變量St印中保存每次執(zhí)行的步驟編號; 步驟c:將本次執(zhí)行步驟的編號以及變量TITLE中的字符串顯示到控
制臺供用戶參考,并且將該編號的值增加l。
下面以不同的Shell函數(shù)傳遞參數(shù)以及tee命令實現(xiàn)的四個函數(shù)來 說明本發(fā)明。
1、在控制臺Console和日志文件中同時顯示、記錄一段文字。請參閱 圖1。
處理步驟
1) 對于一段要處理字符串,例如"Begin upload",將該字符串放 入變量MSG,即MSG- "Begin upload"。
2) 將要輸出的日志文件名稱放入變量LOG—FILE: LOG—FILE=${TARGET_REVISION_DIR}/make. log
3) 將是否記錄操作時間的標記放入LOG—TIME,如果需要記錄操作時 間,則L0GJTIME:1,否則設(shè)置LOG—TIME為O。
4) 調(diào)用自定義函數(shù)echo—tee: echo_tee $MSG
echo一tee函數(shù)的功能是將MSG中的字符串同時顯示到控制臺及日 志文件LOG—FILE。LOG—FILE必須是一個Linux文件系統(tǒng)中可寫的文件路 徑,該文件可以存在真實的物理磁盤中,也可以是在虛擬內(nèi)存中。
為了記錄該操作執(zhí)行的時間,echo—tee函數(shù)還要根據(jù)LOG—TIME的 值來決定是否把當前時間也同時顯示到控制臺或者記錄到L0G_FILE中, 實現(xiàn)方式如下
if (( 1 == $LOG—TIME )); then
echo [、date "+%H:%M:%S〃、] $@ | tee —a ${LOG—FILE}
6lS6
echo $@ I tee -a $仏0G—FILE}
fi
5) 補充說明
echo」ee函數(shù)的功能有很好的擴充性,不光可以控制顯示特定字 符串到控制臺或者日志文件中,還可以擴充將文字內(nèi)容寫入數(shù)據(jù)庫或者 轉(zhuǎn)發(fā)給Syslog。
2、在Console和日志文件中顯示并記錄執(zhí)行的命令,并把該命令的輸
出內(nèi)容也記錄到Console和日志文件中。請參閱圖2。 處理步驟
1) 對于一段要執(zhí)行的命令,例如"Is /opt/sp3000",將該字符串 放入變量CMD,即CMD二 "Is /opt/sp3000"。
2) 將要輸出的日志文件名稱放入變量LOG—FILE: LOG—FILE=${TARGET_REVISION_DIR}/make.log3) 將是否記錄操作時間的標記放入LOG—TIME,如果需要記錄操作時 間,則L0GJIME二1,否則設(shè)置LOG一TIME為O。
4) 調(diào)用自定義函數(shù)echo—run—tee: echo_run—tee $CMD
echo_tee函數(shù)的功能是執(zhí)行CMD中的命令,將該命令同時顯示到 控制臺及日志文件LOG—FIL,并且把該命令的輸出同時顯示到控制臺及 日志文件LOG—FILE。LOG_FILE必須是一個Linux文件系統(tǒng)中可寫的文件 路徑,該文件可以存在真實的物理磁盤中,也可以是在虛擬內(nèi)存中。
為了記錄該操作執(zhí)行的時間,echo—tee函數(shù)還要根據(jù)LOG—TIME的
值來決定是否把當前時間也同時顯示到控制臺或者記錄到LOG_FILE中,
實現(xiàn)方式如下-
if (( 1 == $L0G_TIME )); then
echo [、date 〃+%H:%M:%S〃、 Exec]: $@ | tee —a $^OG—FILE}
6lS6
echo [Exec]: $@ | tee —a ${LOG—FILE}
fi
if (( 0 == $PRETEND_RUN )); then # run to log file
#($@ 2>&1; echo $ > $ERR0R_C0DE—FILE ) | tee —a ${L0G_FILE} 2>&1 ($@ 2>&1; echo $ 〉 $ERROR—CODE—FILE ) | tee -a ${LOG—FILE}
ERR0R_C0DE=、 cat $ERR0R_C0DE_FILE、
if (( 0 != $ERR0R—CODE )); then
printf 〃\nError occured while executing the last command!\n〃 printf 〃Please correct the error and re-run this script. \n〃
kill $$
fi
fi
3、在Console中不顯示執(zhí)行的命令,但是顯示該命令執(zhí)行的輸出信息,
同時將程序運行的輸出信息記錄到日志文件中。請參閱圖3。 處理步驟
1) 對于一段要執(zhí)行的命令,例如"Is /opt/sp3000",將該字符串 放入變量CMD,即CMD: "Is /opt/sp3000"。
2) 將要輸出的日志文件名稱放入變量L0G_FILE: LOG—FILE=${TARGET_REVISION—DIR}/make, log
3) 將是否記錄操作時間的標記放入LOG—TIME,如果需要記錄操作時 間,則L0G一TIME二1,否則設(shè)置LOGJTIME為O。
4) 調(diào)用自定義函數(shù)run—tee: run—tee $CMD
nm—tee函數(shù)的功能是執(zhí)行CMD中的命令,并且把該命令的輸出同 時顯示到控制臺及日志文件L0G_FILE,但是該CMD命令的內(nèi)容在控制臺 及日志文件LOG—FILE中均不體現(xiàn)。LOG—FILE必須是一個Linux文件系 統(tǒng)中可寫的文件路徑,該文件可以存在真實的物理磁盤中,也可以是在 虛擬內(nèi)存中。
為了記錄該操作執(zhí)行的時間,echo—tee函數(shù)還要根據(jù)L0G_TIME的 值來決定是否把當前時間也同時顯示到控制臺或者記錄到LOG—FILE中, 實現(xiàn)方式如下
if (( 1 == $PRETEND_RUN )); then
echo $@ else
$@ I tee -a $U)G—FILE
fi
4、記錄Shell腳本執(zhí)行的步驟編號以及內(nèi)容
在編寫大型的Shell腳本時,經(jīng)常需要將腳本執(zhí)行的步驟通過控制臺 詳細的匯報給用戶,同時將該執(zhí)行的步驟寫入日志文件中。請參閱圖4。
處理步驟
1) 對于程序每次要執(zhí)行的步驟標題,例如"Check SVN sources",
將該標題放入變量TITLE:
TITLE = "Check SVN sources"。
2) 在全局變量St印中保存每次執(zhí)行的步驟編號。
3) 調(diào)用自定義函數(shù)echo一st印 echo—step $TITLE
echo—st印函數(shù)的功能是將本次執(zhí)行步驟的編號以及變量TITLE中 的字符串顯示到控制臺,并且將該自動編號的值增加l。 實現(xiàn)方式如下 ((St印+十)) echo—tee
echo—tee 〃[St印求Step] $@"
綜上所述,本發(fā)明解決了如下幾個在Shell腳本中執(zhí)行命令時的問

1、 在控制臺和日志文件中同時顯示、記錄一段文字。
2、 在控制臺和日志文件中顯示并記錄執(zhí)行的命令,并且把該命令的 輸出內(nèi)容也同時記錄到控制臺和日志文件中。
3、 在控制臺和日志中不顯示、記錄執(zhí)行的命令,但是顯示和記錄命
令執(zhí)行的結(jié)果。
4、 記錄Shell腳本執(zhí)行的步驟編號及內(nèi)容。
5、 在執(zhí)行以上4中操作的時候,將當前執(zhí)行時間同時顯示到控制臺 或者日志文件中。
以上所述僅為本發(fā)明的較佳實施例而已,并非用來限定本發(fā)明的實施 范圍。即凡依本發(fā)明申請專利范圍的內(nèi)容所作的等效變化與修飾,都應(yīng)為 本發(fā)明的技術(shù)范疇。
權(quán)利要求
1.一種基于Shell的帶日志執(zhí)行方法,應(yīng)用于Linux和Unix平臺,該方法實施依據(jù)的硬件平臺為Linux/Unix所支持的硬件平臺,該硬件平臺包括CPU、存儲設(shè)備、鍵盤、顯示器,其特征在于該方法包括如下步驟步驟一將Shell執(zhí)行腳本中給定的要輸出的內(nèi)容或者命令字符串放入一變量中;步驟二將所述變量中的內(nèi)容可以根據(jù)不同的參數(shù)選擇是否出到控制臺,是否在顯示器上顯示出來;如果該變量中存放的是普通字符串,則轉(zhuǎn)步驟三;如果該變量中存放的是命令字符串,則轉(zhuǎn)步驟四;步驟三普通字符串處理模塊處理所述的普通字符串;步驟四命令字符串處理模塊執(zhí)行所述的命令字符串,并處理命令執(zhí)行的輸出。
2、 根據(jù)權(quán)利要求1所述的基于Shell的帶日志執(zhí)行方法,其特征在于所 述的給定的要輸出的內(nèi)容是要輸出的文字信息,存入變量MSG中。
3、 根據(jù)權(quán)利要求1所述的基于Shell的帶日志執(zhí)行方法,其特征在于所 述的給定的要輸出的內(nèi)容是要執(zhí)行的命令,存入變量CMD中。
4、 根據(jù)權(quán)利要求3所述的基于Shell的帶日志執(zhí)行方法,其特征在于還 包括以下步驟步驟A:將執(zhí)行的命令的輸出結(jié)果輸出到控制臺,并在顯示器上顯示 出來;步驟B:將所述命令的輸出結(jié)果記錄到位于存儲器或內(nèi)存中的日志文 件中。
5、 根據(jù)權(quán)利要求3或4所述的基于Shell的帶日志執(zhí)行方法,其特征在 于該方法還包括以下步驟步驟a:將腳本執(zhí)行的步驟標題存入變量TITLE中; 步驟b:在全局變量St印中保存每次執(zhí)行的步驟編號; 步驟c:將本次執(zhí)行步驟的編號以及變量TITLE中的字符串顯示到控 制臺供用戶參考,并且將該編號的值增加l。
6、根據(jù)權(quán)利要求1所述的基于Shell的帶日志執(zhí)行方法,其特征在于該 方法實施依據(jù)的硬件平臺為x86、 AMD、 ARM;所述的存儲設(shè)備是NAND Flash、或T-Flash。
全文摘要
一種基于Shell的帶日志執(zhí)行方法,包括步驟一將Shell執(zhí)行腳本中給定的要輸出的內(nèi)容或者命令字符串放入一變量中;步驟二將所述變量中的內(nèi)容可以根據(jù)不同的參數(shù)選擇是否出到控制臺,是否在顯示器上顯示出來;如果該變量中存放的是普通字符串,則轉(zhuǎn)步驟三;如果該變量中存放的是命令字符串,則轉(zhuǎn)步驟四;步驟三普通字符串處理模塊處理所述的普通字符串;步驟四命令字符串處理模塊執(zhí)行所述的命令字符串,并處理命令執(zhí)行的輸出?;诒景l(fā)明,可以方便的實現(xiàn)大型腳本程序的運行與日志跟蹤,并且在控制臺給出合理的有效的用戶提示。
文檔編號G06F11/36GK101369250SQ20081020088
公開日2009年2月18日 申請日期2008年10月8日 優(yōu)先權(quán)日2008年10月8日
發(fā)明者偉 謝 申請人:上海聞泰電子科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1