專利名稱:Unix服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明提供了一種集成在UNIX服務(wù)器軟件系統(tǒng)上的通用命令行接口模型及實(shí)現(xiàn) 方法。
背景技術(shù):
命令行接口(Command Line Interface,簡(jiǎn)寫CLI)是在圖形用戶界面(⑶I)得到普及 之前使用最為廣泛的人機(jī)交互用戶界面(它通常不支持鼠標(biāo)),用戶通過鍵盤輸入指令,機(jī) 器系統(tǒng)接收到指令后,予以執(zhí)行。通常認(rèn)為,命令行接口沒有圖形用戶界面那么方便用戶操作,圖形用戶界面軟件 更美觀易用,命令行接口的軟件通常需要用戶記憶操作的命令。但是,由于命令行接口本身 的特點(diǎn),要比圖形用戶界面節(jié)約計(jì)算機(jī)系統(tǒng)的資源,在熟記命令的前提下,使用命令行接口 往往要比使用圖形用戶界面的操作速度要快;功能也更加強(qiáng)大。所以,在現(xiàn)在的圖形用戶界 面的操作系統(tǒng)中和應(yīng)用軟件中,通常都保留著可選的命令行接口。命令行接口在現(xiàn)代通信系統(tǒng)中是非常重要,尤其在UNIX服務(wù)器軟件系統(tǒng)中,由于 UNIX服務(wù)器系統(tǒng)本身的特性及其軟件對(duì)性能要求,使得圖形用戶界面力有未逮,所以需要 一個(gè)功能完善的命令行接口,來(lái)提供豐富的控制與自動(dòng)化管理功能。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提出一種UNIX服務(wù)器軟件通用命令行 接口實(shí)現(xiàn)方法,具體技術(shù)方案如下
一種UNIX服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法,是在軟件系統(tǒng)中駐留命令處理模塊 CliServer和命令行用戶接口程序cmdsh兩個(gè)配合工作的部分,由這兩個(gè)部分構(gòu)成通用命 令行接口 ;
cmdsh是通用的,即一個(gè)cmdsh可以配合多個(gè)不同的CliServer工作; cmdsh通過與軟件系統(tǒng)中CliServer進(jìn)行通信; 用戶通過cmdsh發(fā)送指令到軟件系統(tǒng)來(lái)完成相應(yīng)的工作; 從發(fā)送命令到軟件系統(tǒng)的命令行接口,到返回執(zhí)行結(jié)果的過程如下
1)cmdsh連接到軟件系統(tǒng)的CliServenCliServer經(jīng)過用戶名及密碼的檢驗(yàn)后判斷用 戶登錄是否成功;
2)登錄成功,用戶通過cmdsh發(fā)送命令給命令行接口;
3)CliServer收到來(lái)自cmdsh的命令,進(jìn)行合法性檢驗(yàn);
4)如果通過了合法性檢驗(yàn),根據(jù)命令中的信息,由軟件系統(tǒng)中的相應(yīng)執(zhí)行命令處理相 應(yīng)的命令,并將命令執(zhí)行結(jié)果返回cmdsh ;
5)如果沒通過合法性檢驗(yàn),返回執(zhí)行出錯(cuò)信息給cmdsh并斷開與cmdsh的連接;
6)cmdsh等待用戶輸入新命令。所述cmdsh通過TCP/IP協(xié)議與CliServer進(jìn)行通信;cmdsh通過socket方式連 接到 CliServer。所述通用命令行接口中,命令集的數(shù)據(jù)組織形式是命令樹,樹上的每個(gè)節(jié)點(diǎn)就是一個(gè)命令的描述信息,定義了該命令的命令字,命令的說(shuō)明描述,命令類型,及該命令的處 理函數(shù)入口地址。命令樹的生成過程是,首先構(gòu)建根節(jié)點(diǎn),按照節(jié)點(diǎn)node的結(jié)構(gòu)填充樹根節(jié)點(diǎn);再 根據(jù)子命令生成根命令root下的各個(gè)子節(jié)點(diǎn)及節(jié)點(diǎn)說(shuō)明;最終生成命令終節(jié)點(diǎn),命令終節(jié) 點(diǎn)中包含有執(zhí)行命令的入口函數(shù);命令節(jié)點(diǎn)都生成完成后,如果命令有參數(shù),則在命令終結(jié) 點(diǎn)下繼續(xù)生成相應(yīng)的參數(shù)節(jié)點(diǎn)。對(duì)所述命令樹進(jìn)行解析匹配,分析字符串的正確性,以決定是否執(zhí)行該命令,過程 是,逐層解析匹配各個(gè)節(jié)點(diǎn),通過匹配命令樹中定義的命令子節(jié)點(diǎn)及其參數(shù)規(guī)則來(lái)判斷輸 入命令的有效性;在匹配完成后,從匹配到的最終命令節(jié)點(diǎn)來(lái)獲取函數(shù)的入口地址,并執(zhí)行 命令對(duì)應(yīng)的處理函數(shù)。所述命令樹進(jìn)行解析匹配,并對(duì)命令樹進(jìn)行判斷合法性,步驟如下
a)從命令樹root節(jié)開始匹配,根據(jù)命令匹配root的所有分支子節(jié)點(diǎn),若沒有,則失
敗;
b)若有子命令,根據(jù)子命令匹配當(dāng)前命令節(jié)點(diǎn)的分枝子節(jié)點(diǎn),若沒有,則當(dāng)前命令節(jié)點(diǎn) 為命令終結(jié)點(diǎn);
c)命令的參數(shù)個(gè)數(shù)是否與命令樹命令終結(jié)點(diǎn)的分支子節(jié)點(diǎn)的個(gè)數(shù)一致,若不一致,則出錯(cuò)。所述步驟2)中,登錄成功,用戶發(fā)送的命令是命令字符串,其格式為 命令(命令子命令子命令···)+空格+參數(shù)列表(參數(shù)1參數(shù)2…參數(shù)η) 命令以空格來(lái)分隔每個(gè)子命令,參數(shù)列表中以空格來(lái)分隔每個(gè)參數(shù)。所述步驟3)中,合法性檢驗(yàn)是先把命令字符串按以上格式拆分命令字符串,然后 根據(jù)命令樹對(duì)命令及命令參數(shù)的描述信息來(lái)檢驗(yàn)該命令字符串的合法性,是否符合命令節(jié) 點(diǎn)的定義;
所述步驟4)中,執(zhí)行命令處理相應(yīng)的命令是,根據(jù)命令樹數(shù)據(jù)結(jié)構(gòu)中對(duì)該命令的入口 函數(shù)描述信息,執(zhí)行命令對(duì)應(yīng)的處理函數(shù)。本發(fā)明根據(jù)人機(jī)交互語(yǔ)言命令的特點(diǎn),并充分考慮到用戶的各種需求,制定了簡(jiǎn) 單完善的接口。同時(shí),本發(fā)明對(duì)命令行接口按照功能進(jìn)行模塊化封裝,使得在C++軟件系統(tǒng) 中能夠簡(jiǎn)單方便的應(yīng)用,不需要過多的重復(fù)開發(fā),提高了代碼的可重用性,縮短了軟件開發(fā) 周期。并可以支持二次開發(fā),節(jié)省了開發(fā)成本。另外,本發(fā)明應(yīng)用命令樹生成策略構(gòu)造命令 集,提供命令提示及補(bǔ)全功能,為用戶提供了一種簡(jiǎn)單實(shí)用,不需要記憶各種復(fù)雜命令的命 令行輸入方法。一個(gè)功能強(qiáng)大的命令行接口是UNIX服務(wù)器高端軟件產(chǎn)品所必須的。通過它可以 使本來(lái)繁瑣的工作,如軟件日常維護(hù),錯(cuò)誤定位,軟件更新等,變得簡(jiǎn)單方便。本發(fā)明已經(jīng)在 彩鈴,短信等多個(gè)UNIX服務(wù)器軟件產(chǎn)品中實(shí)驗(yàn)應(yīng)用。
圖1是具體實(shí)施例中,命令行工作流程示意圖; 圖2是具體實(shí)施例中,命令樹結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面結(jié)合附圖與具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
命令行接口由駐留在軟件系統(tǒng)中的命令處理模塊(CliServer)和命令行用戶接口 程序(cmdsh) 2部分組成,兩者配合工作。命令行用戶接口程序是通用的,即一個(gè)用戶接口 程序,可以配合多個(gè)不同的命令處理模塊工作。命令行用戶接口程序通過TCP/IP協(xié)議與軟 件系統(tǒng)中命令處理程序進(jìn)行通信。用戶(系統(tǒng)管理員或軟件維護(hù)人員)通過命令行用戶接口 程序發(fā)送指令到軟件系統(tǒng)來(lái)完成相應(yīng)的工作,如查詢資源使用情況,監(jiān)控系統(tǒng)運(yùn)行狀況,修 改系統(tǒng)環(huán)境變量等。為了對(duì)命令行的執(zhí)行流程有一個(gè)比較清晰的說(shuō)明,下面分析從發(fā)送命令到軟件 系統(tǒng)的命令行接口,到返回執(zhí)行結(jié)果的過程,如圖1所示。具體執(zhí)行流程分析如下
(1 )首先將命令行處理程序CliServer集成到應(yīng)用軟件系統(tǒng)中,并構(gòu)造命令節(jié)點(diǎn)來(lái) 生產(chǎn)命令樹。( 2 )命令行用戶接口程序(cmdsh)通過socket方式連接到軟件系統(tǒng)命令處理 模塊(CliServer),命令處理模塊經(jīng)過用戶名及密碼的檢驗(yàn)后判斷其登錄是否成功。
(3 )登錄成功,用戶就可以通過cmdsh發(fā)送命令給命令行接口。用戶在輸入命令字 符串時(shí),可以通過TAB制表符進(jìn)行命令自動(dòng)補(bǔ)全以及命令和命令參數(shù)的說(shuō)明幫助,方便用 戶的操作。cmdsh發(fā)送的命令字符串格式為
命令(命令子命令子命令···)+空格+參數(shù)列表(參數(shù)1參數(shù)2…參數(shù)η) 命令以空格來(lái)分隔每個(gè)子命令,參數(shù)列表中以空格來(lái)分隔每個(gè)參數(shù)。如add user name pwd,其中add user為命令字符串;name pwd為參數(shù)列表。( 4 KliServer收到命令字符串,并按以上格式拆分命令字符串,然后根據(jù)命令 樹對(duì)命令及命令參數(shù)的描述信息來(lái)檢驗(yàn)該命令字符串的合法性,是否符合命令節(jié)點(diǎn)的定 義。( 5 )如果通過了合法性檢驗(yàn),根據(jù)命令樹數(shù)據(jù)結(jié)構(gòu)中對(duì)該命令的入口函數(shù)描述 信息,通過回調(diào)的方式執(zhí)行命令對(duì)應(yīng)的處理函數(shù)并將命令執(zhí)行結(jié)果返回cmdsh。( 6 )如果沒通過合法性檢驗(yàn),返回執(zhí)行出錯(cuò)信息并斷開網(wǎng)絡(luò)連接。( 7 ) cmdsh程序又回到提示輸入命令狀態(tài),等待用戶輸入命令。具體實(shí)施時(shí),按照命令行接口的工作流程,可分成4個(gè)功能模塊來(lái)實(shí)現(xiàn)本接口 通信模塊、命令解析處理模塊、命令樹生成模塊和用戶接口模塊。(一 ) 通信模塊實(shí)現(xiàn)
通信模塊需要完成命令行用戶接口程序與軟件系統(tǒng)命令處理模塊間的通信,通信方式 采用TCP/IP協(xié)議長(zhǎng)連接。軟件系統(tǒng)命令處理模塊CliServer為服務(wù)端,命令行用戶接口程 序cmdsh為客戶端,為了不過多的消耗系統(tǒng)資源,可對(duì)支持的客戶端數(shù)進(jìn)行限制。如果一臺(tái)服務(wù)器有多個(gè)軟件系統(tǒng)應(yīng)用命令行接口,每個(gè)命令行服務(wù)端需要監(jiān)聽不 同的端口。當(dāng)客戶端在指定端口與服務(wù)端連接成功后,通信模塊負(fù)責(zé)登錄消息及命令消息 的收發(fā),以及消息報(bào)文的拆分。客戶端登陸3次失敗,則服務(wù)器與客戶端斷開連接。通信模塊中消息格式定義如下
6(二) 命令樹生成模塊實(shí)現(xiàn)
命令樹即命令行接口中命令集的數(shù)據(jù)組織形式,樹上的每個(gè)節(jié)點(diǎn)就是一個(gè)命令的描 述信息,詳細(xì)定義了該命令的命令字,命令的說(shuō)明描述,命令類型,及該命令的處理函數(shù)入 口地址。命令解析過程通過搜索命令樹來(lái)完成。
其中命令樹每一個(gè)節(jié)點(diǎn)(node)的結(jié)構(gòu)定義如下所示
命令樹生成模塊主要是組織本命令行接口的命令集。為了提高命令解析模塊的效率, 命令集以樹的形式組織,如圖2
下面以圖2命令樹為例,具體描述命令樹的生成。此命令樹共構(gòu)造了3 條命令,"show running config,,、“show version” 禾口 “add account〈name〉<pwd>”,(此處的參數(shù)用尖括號(hào)括起來(lái),以此來(lái)和命令區(qū)分,在node結(jié)構(gòu)中 通過Type來(lái)區(qū)分)。首先必須構(gòu)建根節(jié)點(diǎn),按照node的結(jié)構(gòu)填充樹根節(jié),再根據(jù)子命令生 成根命令root下子show子節(jié)點(diǎn)和add子節(jié)點(diǎn)及節(jié)點(diǎn)說(shuō)明,同樣生成version子節(jié)點(diǎn)和 running子節(jié)點(diǎn)及account子節(jié)點(diǎn)及其以下的命令子節(jié)點(diǎn)。其中version子節(jié)點(diǎn),config子節(jié)點(diǎn)和account子節(jié)點(diǎn)是命令終節(jié)點(diǎn)。命令終節(jié) 點(diǎn)中包含有執(zhí)行命令的入口函數(shù)。命令節(jié)點(diǎn)都生成完成后,如果命令有參數(shù),則需要在命令 終結(jié)點(diǎn)下生成參數(shù)節(jié)點(diǎn),name子節(jié)點(diǎn)和pwd子節(jié)點(diǎn)都是參數(shù)節(jié)點(diǎn)。命令樹可以在程序中手工構(gòu)造,也可以由文件自動(dòng)構(gòu)造。(三) 命令解析模塊實(shí)現(xiàn)
命令解析模塊是命令行接口中的重要模塊。它主要用來(lái)拆分用戶輸入的字符串,并分 析字符串的正確性,以決定是否執(zhí)行該命令。該模塊需要匹配命令樹中定義的命令子及其 參數(shù)規(guī)則來(lái)判斷輸入命令的有效性。在命令匹配完成后,從匹配到的最終命令節(jié)點(diǎn)來(lái)獲取 函數(shù)的入口地址,并執(zhí)行命令對(duì)應(yīng)的處理函數(shù)。其解析匹配的核心內(nèi)容包括
7(1 )從命令樹root節(jié)開始匹配,根據(jù)命令匹配root的所有分支子節(jié)點(diǎn),若沒有,則 失敗。( 2 )若有子命令,根據(jù)子命令匹配當(dāng)前命令節(jié)點(diǎn)的分枝子節(jié)點(diǎn),若沒有,則當(dāng) 前命令節(jié)點(diǎn)為命令終結(jié)點(diǎn)。( 3 )命令的參數(shù)個(gè)數(shù)是否與命令樹命令終結(jié)點(diǎn)的分支子節(jié)點(diǎn)的個(gè)數(shù)一致,若不 一致,則出錯(cuò)。命令行解析與匹配的核心代碼如下所示
命令匹配的核心代碼如下所示‘
tyrp
ο at
(四) 用戶接口模塊實(shí)現(xiàn)
用戶接口模塊是用戶輸入命令并顯示執(zhí)行結(jié)果的人機(jī)交互界面。實(shí)現(xiàn)了以下功能 當(dāng)連接成功后,提示用戶輸入用戶名及密碼登陸到命令行接口。登陸成功后,生成輸入界面及命令輸入提示符”〉”(類似于DOS界面)。當(dāng)用戶輸入命令時(shí),開始按字符接收客戶的輸入。如果沒有輸入,就等待,否則 判斷輸入的字符,如果退格鍵,刪除命令輸入緩沖中當(dāng)前光標(biāo)位置處的一個(gè)字符;如果是 UP/DOWN鍵,則翻閱歷史命令;如果輸入制表符(tab)鍵,則按照命令樹格式進(jìn)行命令字符 串的補(bǔ)全;如果輸入?鍵,則輸出命令幫助信息;如果輸入鍵值在空格與127之間,將該輸 入鍵值保存到輸入命令接收緩沖,并刷新客戶端界面;如果是回車鍵,標(biāo)志客戶一次正常的 命令字符串輸入已結(jié)束,此時(shí)應(yīng)將命令字符串傳入傳輸模塊并由傳輸模塊發(fā)送到命令行處 理模塊。在用戶接口模塊中,會(huì)記錄界面的相關(guān)信息,如當(dāng)前光標(biāo)位置、命令行字符串的最 大字符個(gè)數(shù)、一屏的每行寬度及列數(shù),當(dāng)用戶的當(dāng)前光標(biāo)超過每行寬度時(shí),就換行;當(dāng)輸入 的命令行字符串超過最大字符個(gè)數(shù)時(shí),就禁止用戶再輸入。
9
權(quán)利要求
一種UNIX服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法,其特征是在軟件系統(tǒng)中駐留命令處理模塊CliServer和命令行用戶接口程序cmdsh兩個(gè)配合工作的部分,由這兩個(gè)部分構(gòu)成通用命令行接口;cmdsh是通用的,即一個(gè)cmdsh可以配合多個(gè)不同的CliServer工作;cmdsh通過與軟件系統(tǒng)中CliServer進(jìn)行通信;用戶通過cmdsh發(fā)送指令到軟件系統(tǒng)來(lái)完成相應(yīng)的工作;從發(fā)送命令到軟件系統(tǒng)的命令行接口,到返回執(zhí)行結(jié)果的過程如下1)cmdsh連接到軟件系統(tǒng)的CliServer,CliServer經(jīng)過用戶名及密碼的檢驗(yàn)后判斷用戶登錄是否成功;2)登錄成功,用戶通過cmdsh發(fā)送命令給命令行接口;3)CliServer收到來(lái)自cmdsh的命令,進(jìn)行合法性檢驗(yàn);4)如果通過了合法性檢驗(yàn),根據(jù)命令中的信息,由軟件系統(tǒng)中的相應(yīng)執(zhí)行命令處理相應(yīng)的命令,并將命令執(zhí)行結(jié)果返回cmdsh;5)如果沒通過合法性檢驗(yàn),返回執(zhí)行出錯(cuò)信息給cmdsh并斷開與cmdsh的連接;6)cmdsh等待用戶輸入新命令。
2.根據(jù)權(quán)利要求1所述的UNIX服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法,其特征是所述 cmdsh通過TCP/IP協(xié)議與CliServer進(jìn)行通信;cmdsh通過socket方式連接到CliServer。 3.根據(jù)權(quán)利要求1或2所述的UNIX服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法,其特征是所 述通用命令行接口中,命令集的數(shù)據(jù)組織形式是命令樹,樹上的每個(gè)節(jié)點(diǎn)就是一個(gè)命令的 描述信息,定義了該命令的命令字,命令的說(shuō)明描述,命令類型,及該命令的處理函數(shù)入口 地址;
3.命令樹的生成過程是,首先構(gòu)建根節(jié)點(diǎn),按照節(jié)點(diǎn)node的結(jié)構(gòu)填充樹根節(jié)點(diǎn);再根據(jù) 子命令生成根命令root下的各個(gè)子節(jié)點(diǎn)及節(jié)點(diǎn)說(shuō)明;最終生成命令終節(jié)點(diǎn),命令終節(jié)點(diǎn)中 包含有執(zhí)行命令的入口函數(shù);命令節(jié)點(diǎn)都生成完成后,如果命令有參數(shù),則在命令終結(jié)點(diǎn)下 繼續(xù)生成相應(yīng)的參數(shù)節(jié)點(diǎn);對(duì)所述命令樹進(jìn)行解析匹配,分析字符串的正確性,以決定是否執(zhí)行該命令,過程是, 逐層解析匹配各個(gè)節(jié)點(diǎn),通過匹配命令樹中定義的命令子節(jié)點(diǎn)及其參數(shù)規(guī)則來(lái)判斷輸入命 令的有效性;在匹配完成后,從匹配到的最終命令節(jié)點(diǎn)來(lái)獲取函數(shù)的入口地址,并執(zhí)行命令 對(duì)應(yīng)的處理函數(shù)。
4.根據(jù)權(quán)利要求3所述的UNIX服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法,其特征是所述 命令樹進(jìn)行解析匹配,并對(duì)命令樹進(jìn)行判斷合法性,步驟如下a)從命令樹root節(jié)開始匹配,根據(jù)命令匹配root的所有分支子節(jié)點(diǎn),若沒有,則失??;b)若有子命令,根據(jù)子命令匹配當(dāng)前命令節(jié)點(diǎn)的分枝子節(jié)點(diǎn),若沒有,則當(dāng)前命令節(jié)點(diǎn) 為命令終結(jié)點(diǎn);c)命令的參數(shù)個(gè)數(shù)是否與命令樹命令終結(jié)點(diǎn)的分支子節(jié)點(diǎn)的個(gè)數(shù)一致,若不一致,則出錯(cuò)。
5.根據(jù)權(quán)利要求4所述的UNIX服務(wù)器軟件通用命令行接口實(shí)現(xiàn)方法,其特征是 所述步驟2)中,登錄成功,用戶發(fā)送的命令是命令字符串,其格式為命令(命令子命令子命令···)+空格+參數(shù)列表(參數(shù)1參數(shù)2…參數(shù)η) 命令以空格來(lái)分隔每個(gè)子命令,參數(shù)列表中以空格來(lái)分隔每個(gè)參數(shù); 所述步驟3)中,合法性檢驗(yàn)是先把命令字符串按以上格式拆分命令字符串,然后根據(jù) 命令樹對(duì)命令及命令參數(shù)的描述信息來(lái)檢驗(yàn)該命令字符串的合法性,是否符合命令節(jié)點(diǎn)的 定義; 所述步驟4)中,執(zhí)行命令處理相應(yīng)的命令是,根據(jù)命令樹數(shù)據(jù)結(jié)構(gòu)中對(duì)該命令的入口 函數(shù)描述信息,執(zhí)行命令對(duì)應(yīng)的處理函數(shù)。
全文摘要
本發(fā)明提供了一種集成在UNIX服務(wù)器軟件系統(tǒng)上的通用命令行接口模型及實(shí)現(xiàn)方法。根據(jù)人機(jī)交互語(yǔ)言命令的特點(diǎn),并充分考慮到用戶的各種需求,制定了完善的接口。同時(shí),本發(fā)明對(duì)命令行接口按照功能進(jìn)行了模塊化封裝,使得在C++軟件系統(tǒng)中能夠簡(jiǎn)單方便的應(yīng)用,不需要過多的重復(fù)開發(fā),提高了代碼的可重用性,縮短了軟件開發(fā)周期。并可以支持二次開發(fā),節(jié)省了開發(fā)成本。另外,本發(fā)明應(yīng)用命令樹生成策略構(gòu)造命令集,提供命令提示及補(bǔ)全功能,為用戶提供了一種簡(jiǎn)單實(shí)用,不需要記憶各種復(fù)雜命令的命令行輸入方法。
文檔編號(hào)G06F9/44GK101944023SQ20101028093
公開日2011年1月12日 申請(qǐng)日期2010年9月14日 優(yōu)先權(quán)日2010年9月14日
發(fā)明者任建國(guó), 孫力斌, 龐海東, 楊震, 池瑞楠, 陸志強(qiáng) 申請(qǐng)人:南京聯(lián)創(chuàng)科技集團(tuán)股份有限公司