AE工具開發指引
- 第1章 AE簡介
-
- 1.1 AE安裝部署
- 1.2 AE使用者資訊注冊
- 1.3 AE使用者資訊修改
- 1.4 AE使用指引
- 1.5 AE版hello world
- 第2章 AE檔案系統
-
- 2.1 AE檔案系統介紹
- 2.2 AE檔案總體結構圖
- 2.3 AE檔案命名規則
- 2.4 AE使用者檔案展示示例
- 第3章 使用者檔案基本用法
-
- 3.1 檢視全路徑檔案名
- 3.2 type檢視檔案類型
- 3.3 cat列印檔案内容
- 3.4 vi/view打開編輯檔案内容
- 3.5 trun清空臨時檔案
- 3.6 bak庫檔案備份
- 3.7 cp拷貝檔案
- 3.8 diff比較臨時檔案差異
- 第4章 庫檔案資訊管理
-
- 4.1 AE标簽介紹
- 4.2 AE标簽指令彙總
- 4.3 AE标簽新增
- 4.4 AE标簽删除
- 4.5 AE标簽查詢
- 4.6 AE标簽修改
- 4.7 AE子标簽
- 4.8 AE子标簽分層
- 4.9 AE子标簽新增修改及删除
- 4.10 AE子标簽常用指令
- 4.11 AE子标簽應用示例
- 第5章 庫檔案腳本管理
-
- 5.1 AE腳本标簽介紹
- 5.2 AE臨時檔案腳本執行
- 5.3 AE标簽腳本的執行過程
- 5.4 AE腳本标簽tippara動态參數及para參數擷取
- 5.5 AE腳本标簽importinfo庫函數導入
- 5.6 AE标簽腳本注釋文法
- 5.7 echo反向腳本指令生成
- 5.8 AE子标簽腳本
- 5.9 AE子标簽特性
- 5.10 AE标簽腳本基本用法示例
- 第6章 AE使用者管理
-
- 6.1 AE指令運作三種模式
- 6.2 預設使用者模式
- 6.3 指定使用者模式
- 6.4 登陸使用者模式
- 6.5 user使用者指令彙總
- 第7章 AE格式化文本處理
-
- 7.1 文本對齊很重要
- 7.2 ord臨時檔案文本對齊
- 7.3 格式化指令基礎
- 7.4 AE自帶的格式化參數
- 7.5 域條件判斷
- 7.6 AE域條件判斷用法示例
- 第8章 AE檔案上傳和下載下傳
-
- 8.1 基本用法說明
- 8.2 使用者檔案上傳
- 8.3 使用者檔案下載下傳
- 8.4 檔案對外釋出
- 8.5 常用指令彙總
- 第9章 AE資料庫通路
-
- 9.1 AE資料庫通路
- 9.2 常用指令彙總
- 第10章 AE項目開發示範
-
- 10.1 整體說明
- 10.2 需求開發計劃
-
- 10.2.1 傳統需求開發計劃**
- 10.2.2 基于AE的需求開發計劃
- 10.2.3 AE需求開發計劃樣例單
- 10.3 需求開發
-
- 10.3.1 整體說明
- 10.3.2 基于AE的檔案查找
- 10.3.3 基于AE的代碼編輯
- 10.3.4 基于AE的代碼測試
- 10.4 代碼入庫
-
- 10.4.1 devdiff的不足
- 10.4.2 基于AE的devdiff入庫工具
- 10.4.3 基于AE的devdiff使用指引
- 10.4.4 基于AE的devdiff工具上傳下載下傳與分享
- 10.5 上線版本檢查
-
- 10.5.1 整體說明
- 10.5.2 AE自動化版本檢查
- 10.6 AE項目生态圈
-
- 10.6.1 總體說明
- 10.6.2 腳本更新
- 10.6.3 AE無處不在
- 第11章 AE應用開發
-
- 11.1 AE自動化程式設計
-
- 11.1.1 總體說明
- 11.1.2 變量定義初始化及日志列印
- 11.1.3 檔案打開周遊關閉
- 11.1.4 資料庫表增删改查及遊标使用
- 11.2 AE繪圖
-
- 11.2.1 總體說明
- 11.2.2 棋盤報表繪制
- 11.2.3 棋盤報表繪制過程示範
- 11.3 AE算法
-
- 11.3.1 總體說明
- 11.3.2 發紅包
- 11.3.3 AE三打十五
- 11.3.4 AE簡筆畫
- 11.3.5 AE象棋
第1章 AE簡介
AE是一款輕量級項目管理工具,AE來源于英文 “AUTO EASY”,通過AE能讓我們的工作實作 “自動化,簡單化”。AE提供了一套檔案管了解決方案,可以幫助我們管理所有文本資訊。AE同時提供了一套腳本管理方案,能夠幫助我們快速生成疊代各種腳本。通過這兩個功能的互相配合,我們能夠"簡化"我們的工作流程,實作工作的"自動化"。
AE本質上就是一個[.sh]腳本程式,程式全名[autoeasy.sh]。我們隻需要給該腳本建立一個名叫[ae]的全局連接配接,就可以在系統的任何位置使用該工具了。
1.1 AE安裝部署
目前AE隻開發了unix版本,可按照如下步驟安裝該工具。
1. 下載下傳工具源碼
管理者需要下載下傳[autoeasy.sh]和[autoeasy.txt]兩個檔案,然後将其拷貝到自己的私人目錄。通過過指令[chmod u+x autoeasy.sh],賦予腳本可執行權限。開發工具源碼及相關文檔已分享到git [https://github.com/sukin1986/ae.git]1
2. 修改管理者IP和目錄
通過指令[vi autoeasy.sh]打開腳本程式,按照提示修改管理者[IP]為個人主機IP,修改管理者目錄為目前目錄,然後儲存退出。
3. 建立全局連接配接
我們有兩種方法建立腳本的全局連接配接,一個是自動一個是手動。自動建立全局連接配接,需要在工具的安裝目錄運作指令[autoeasy.sh z aeln sh]。手動建立則需要自己在系統的[bin]目錄或者[shbin]目錄>通過[ln -s autoeasy.sh ae]指令建立腳本的全局連結。其中autoeasy.sh必須使用全路徑檔案名。
4. 檢測是否安裝成功
做完以上三個步驟,然後進入系統的任何目錄執行指令[ae],如果看到工具"使用指引"資訊,則說明安裝成功。
1.2 AE使用者資訊注冊
AE提供的是一個多人協同工作環境,如果想使用AE就必須注冊為AE使用者。通過運作指令[ae]檢視工具使用指引,按照指引輸入除[user]外的任意參數即可進入注冊流程,最後按照提示輸入個人資訊完成注
冊。
注冊需提供的個人資訊包括英文名(拼音名),密碼(6位數字),手機号(11位數字),個人工作目錄。其中英文名不少于2個字元,一般使用個人姓名的全拼或者名字的首字母組合。密碼必須為6位數字,不能出現其他類型字元。手機号必須為11位數字,最好使用真實的手機号,友善其他人跟自己聯系。個人工作目錄必須是全路徑目錄名,可以是已經存在的目錄名,也可以是可以通過[mkdir]指令直接建立的目錄名。個人工作目錄一般指定為個人私人目錄下的[autoeasy]目錄,這樣可以把工具檔案跟其他檔案分開管理。
下面指令展示了使用者的詳細注冊流程:
~ mac126$ ae user new
注冊新使用者:
--------------------------------------------------------------------------------
please input your name:jim
please input your password(use six digit):123456
please input your phone no(use eleven digit):13533440001
please input your priv work dir(eg:/Users/mac126/priv/jim/autoeasy):/Users/mac126/priv/jim/autoeasy
--------------------------------------------------------------------------------
regin success!you can use it by login in!
~ mac126$ ae user jim
2020.01.15.0001 202001150001 jim xxxxxx 13533440001 /Users/mac126/priv/jim/autoeasy
~ mac126$ ae whoami
jim
~ mac126$ ae home
/Users/mac126/priv/jim/autoeasy
~ mac126$
使用者注冊完畢工具會自動将使用者的注冊資訊儲存起來,使用者以後就可以直接使用工具的所有指令了。使用者注冊完成運作指令[ae user self],可以檢視到個人注冊資訊。運作指令[ae tool]可以看到工具>的全路徑檔案名,運作指令[ae z]可以看到工具庫檔案的全路徑檔案名。
1.3 AE使用者資訊修改
工具提供了[modify]指令,幫助使用者修改個人注冊資訊。已注冊使用者運作指令[ae user modify]按照提示修改個人注冊資訊,其過程跟注冊流程基本相同。如果使用者修改個人的工作目錄,則系統會将舊工
作目錄的個人檔案拷貝到新的工作目錄,不會造成個人檔案的丢失。
下面展示了使用者個人資訊修改流程:
~ mac126$ ae user self
2020.01.15.0001 202001150001 jim xxxxxx 13533440001 /Users/mac126/priv/jim/autoeasy
~ mac126$ ae user modify
使用者資訊修改:
--------------------------------------------------------------------------------
old info:
name :jim
password:123456
phone :13533440001
workdir :/Users/mac126/priv/jim/autoeasy
--------------------------------------------------------------------------------
please input your name:jim
please input your password(use six digit):123456
please input your phone no(use eleven digit):12533440001
please input your priv work dir(eg:/Users/mac126/priv/jim/autoeasy):/Users/mac126/priv/jim/autoeasy
--------------------------------------------------------------------------------
modify success!you can use this tool now!
~ mac126$
1.4 AE使用指引
AE工具使用非常簡單,使用者可通過工具"使用指引"或者檢視"幫助手冊"快速熟悉工具指令。使用者運作指令[ae]即可調出AE工具"使用指引",使用指引展示了工具的常用指令,每個指令後面都帶上了改指令在幫助手冊中的"連結"。通過運作該"連結"指令,使用者可檢視該指令的詳細用法。
指令的詳細用法都是通過[help]指令調出,工具在收到使用者的[help]指令時,會自動查找"幫助手冊",然後将詳細用法列印在螢幕。例如使用者輸入[ae help user]指令,就可以直接檢視[user]指令的詳細>用法。
下圖即通過[ae]指令調出的使用指引資訊:
~ mac126$ ae
ae工具使用指引:(首次使用帶除user以外的任何參數則會進入注冊流程)
--------------------------------------------------------------------------------
ae user :使用者資訊管理 |詳細用法:[ae help user ]
ae home :檢視個人工作目錄 |詳細用法:[ae help home ]
ae bak :使用者檔案備份 |詳細用法:[ae help bak ]
ae tool :檢視ae工具的全路徑檔案名|詳細用法:[ae help tool ]
ae toolmode :檢視ae工具的安裝模式 |詳細用法:[ae help toolmode] -- new
ae usemode :檢視ae指令的運作模式 |詳細用法:[ae help tooluse ] -- new
ae whoami :檢視目前用具指令的調用者|詳細用法:[ae help whoami ]
ae uname :檢視ae工具系統名 |詳細用法:[ae help uname ]
ae load :分享或者下載下傳标簽(應用) |詳細用法:[ae help load ]
--------------------------------------------------------------------------------
ae s :檢視聊件全路徑 |詳細用法:[ae help file ]
ae s type :檢視檔案類型 |詳細用法:[ae help type ]
ae s vi :用vi編輯器打開檔案 |詳細用法:[ae help vi ]
ae s view :用view編輯器打開檔案 |詳細用法:[ae help view ]
ae s trun :清空檔案 |詳細用法:[ae help trun ]
ae s ord :讓檔案内容按域對齊 |詳細用法:[ae help ord ]
ae s echo :輸出檔案反向鏡像腳本 |詳細用法:[ae help echo ]
ae s cat :檢視檔案内容 |詳細用法:[ae help cat ]
ae s cal :計算s檔案中所有數字之和 |詳細用法:[ae help cal ]
ae s sh :執行檔案文本 |詳細用法:[ae help sh ]
ae s d :檔案拷貝(s<--d) |詳細用法:[ae help cp ]
ae s d diff :比較兩個臨時檔案文本異同|詳細用法:[ae help diff ]
ae b label :将标簽内容提取到s檔案 |詳細用法:[ae help label ]
ae b s :将标簽内容儲存到庫檔案 |詳細用法:[ae help label ]
ae b lab del:删除指定标簽 |詳細用法:[ae help label ]
ae b lab sh :執行庫檔案标簽腳本 |詳細用法:[ae help sh ]
ae b lab pg :檢視指定标簽的子标簽 |詳細用法:[ae help pg ]
--------------------------------------------------------------------------------
ae para 1 1 :擷取動态參數 |詳細用法:[ae help para ]
--------------------------------------------------------------------------------
ae 0 format :字元串格式化處理 |詳細用法:[ae help format ]
ae 1 format :字元串格式化處理 |詳細用法:[ae help format ]
ae 0 cal :計算s檔案中所有數字之和 |詳細用法:[ae help cal ]
ae 1 cal :計算s檔案第1列數字之和 |詳細用法:[ae help cal ]
--------------------------------------------------------------------------------
ae sql sqlstr:[sql]運作資料庫語句 |詳細用法:[ae help sql ]
ae sql tbname:[sql]查詢表結構資訊 |詳細用法:[ae help sql ]
ae cal 1+1 :計算數學表達式 |詳細用法:[ae help cal ]
--------------------------------------------------------------------------------
~ mac126$
1.5 AE版hello world
這節通過一個最簡單的例子,展示工具的最基本用法和功能。
通過AE将一個hello world腳本使用hello标簽存放在b庫檔案,然後查詢運作該hello标簽腳本具體操作如下:
1清空s檔案
[ae s trun]
2 編輯s檔案
[ae s vi]
#:hello:sh:列印hello world的腳本
echo "hello world!"
編輯完成wq儲存退出s臨時檔案
3 将hello标簽儲存到b檔案
[ae b s]
4 檢視b庫檔案的hello标簽内容
[ae b hello]
#:hello:sh:列印hello world的腳本
echo "hello world!"
AE會将标簽内容列印在螢幕
5運作hello腳本
[ae b hello sh]
’
hello world!
看到螢幕上輸出[hello world!]則表示運作成功!
第2章 AE檔案系統
2.1 AE檔案系統介紹
AE具有完善的檔案系統,AE檔案系統由工具檔案,使用者檔案和系統鏡像檔案三部分組成。
1.鏡像檔案
鏡像檔案由工具自己使用,是隐藏檔案,外界無法直接通路。檢視鏡像檔案可以通過指令[cd $(ae home)]進入個人工作目錄,然後通過指令[ls -a]檢視鏡像檔案詳情。
2.工具檔案
工具檔案由管理者進行統一管理,工具檔案存放所有使用者的共用資訊, 工具檔案用英文字母[z]表示。檢視工具檔案可以通過指令[cd $(ae toolhome)]進入到工具安裝目錄,然後通過[ls -lrt autoeasy.txt]檢視檔案詳情。
3.使用者檔案
使用者檔案是每個注冊使用者獨立使用的檔案,用[sadgcpbf]這幾個單英文字母表示。使用者檔案對使用者來說具有全局屬性,使用者可以在系統的任意位置通過檔案名來檢視和使用檔案。例如通過[ae s]指令,可>以檢視到[s]檔案的全路徑檔案名。
2.2 AE檔案總體結構圖
下圖展示了工具整個檔案系統結構圖,每個檔案都有自己的用法。其中鏡像檔案都是隐藏文本,這些檔案隻被[autoeasy.sh]本身使用。工具檔案隻被工具管理者使用,其他使用者隻可讀取該檔案但沒有權>限修改該檔案。使用者檔案是每個使用者最常接觸到的,可以按照工具的使用方法随意支配。
使用者檔案又分為臨時檔案和庫文檔案,臨時檔案又細分為具有可執行權限的[g]檔案,以及沒有執行權限的[sad]檔案。庫檔案[cpfb]對工具來說是完全等價的,但在使用習慣上使用者可以自己安排。
檔案系統---工具檔案---庫檔案------------[z] -- 工具管理者管理使用
|
|--使用者檔案---庫檔案-------[c/p/f/b] -- 使用者自己管理使用
| |
| |--臨時檔案----[s/a/d] -- 使用者具有增删改查全部權限
| |--[g] -- 使用者臨時可執行檔案
|
|--使用者鏡像檔案[.[s/a/d/g/c/p/f/b]] --隐藏檔案,所有使用者不可用
|
|--工具鏡像檔案[.z] -- 隐藏檔案,所有使用者不可用
2.3 AE檔案命名規則
剛接觸工具的人都會對工具的命名規則感到驚奇,工具本身用[ae]兩個字母表示,工具使用到的所有檔案都用單字母表示。工具采用這種簡潔命名法則,目的是降低使用者的輸入負擔,提高指令使用效率。
簡潔是工具的基本特性,簡潔思想貫穿在整套工具的開發設計當中。
使用者接觸到的檔案總體上分為臨時檔案和庫檔案。
臨時檔案可以随便建立,删除,修改,查詢而不會影響系統穩定性。臨時檔案中的[s]檔案可以以标簽為機關跟任意庫檔案傳遞文本資訊。
庫檔案是以标簽為機關儲存資訊,資訊可以是普通的文本也可以是腳本的文本。庫檔案必須借助[s]檔案以标簽為機關對存儲資訊進行管理。可以通過指令[ae help label]了解标簽的使用規則
下表展示了使用者所有檔案命名規則及檔案類型分類資訊:
檔案名 英文名 檔案類型 命名說明
s source 臨時檔案 源檔案,所有庫檔案标簽文本的來源
a assist 臨時檔案 輔助檔案,輔助生成目标資料的資料,一般存放中間資料
d dest 臨時檔案 目标檔案,最終想要的結果資料
g game 臨時檔案 臨時腳本檔案,最初是為了寫遊戲算法而建立
c command 庫檔案 指令用法檔案
p private 庫檔案 私人檔案
f file 庫檔案 基礎項目資料檔案
b base 庫檔案 基礎腳本庫檔案
z zero 庫檔案 工具基礎檔案,從z檔案開始搭建整個應用環境平台
2.4 AE使用者檔案展示示例
ae
|-- autoeasy.sh -- 工具源碼 -- 系統級别功能支援
|-- autoeasy.txt -- z檔案 -- [ae z] -- 工具庫檔案:所有使用者公共資訊和公共應用
|-- .autoeasy.txt -- z鏡像檔案 -- 工具鏡像庫檔案:存放使用者上傳檔案等資訊
|
autoeasy1:使用者1工作目錄 -- 使用者自己設定
|-- s198030001051.txt -- s檔案 -- [ae s] -- 臨時檔案:一般存放資料源
|-- a198030001051.txt -- a檔案 -- [ae a] -- 臨時檔案:一般存放輔助資料
|-- d198030001051.txt -- d檔案 -- [ae d] -- 臨時檔案:一般存放目标資料
|-- g198030001051.sh -- g檔案 -- [ae g] -- 臨時檔案:具有可執行權限的腳本檔案
|-- c198030001051.txt -- c檔案 -- [ae c] -- 庫檔案 :語言級庫檔案,跟具體項目或公無
|-- p198030001051.txt -- p檔案 -- [ae p] -- 庫檔案 :私人庫檔案
|-- f198030001051.txt -- f檔案 -- [ae f] -- 庫檔案 :公司和項目級别的文本檔案資訊
|-- b198030001051.txt -- b檔案 -- [ae b] -- 庫檔案 :公司和項目級别的腳本檔案
|-- toolbak
|-- .s198030001051.txt -- s鏡像檔案 -- 系統檔案
|-- .a198030001051.txt -- a鏡像檔案 -- 系統檔案
|-- .d198030001051.txt -- d鏡像檔案 -- 系統檔案
|-- .g198030001051.sh -- g鏡像檔案 -- 系統檔案
|-- .c198030001051.txt -- c鏡像檔案 -- 系統檔案
|-- .p198030001051.txt -- p鏡像檔案 -- 系統檔案
|-- .f198030001051.txt -- f鏡像檔案 -- 系統檔案
|-- .b198030001051.txt -- b鏡像檔案 -- 系統檔案
|
autoeasy2:使用者2工作目錄 -- 使用者自己設定
|
autoeasy3:使用者3工作目錄 -- 使用者自己設定
|
…
第3章 使用者檔案基本用法
3.1 檢視全路徑檔案名
1.使用說明
工具的庫檔案存放在工具安裝目錄,使用者的所有檔案存放在使用者工作目錄,這些檔案從工具的角度來看,都具備全局屬性,即可以在系統的任何位置檢視到這些檔案。
2.全路徑檔案名
檔案的全路徑檔案名=“工作目錄”+“單字元檔案名”+“ip生成的id字元串”+“檔案字尾名”。例如[s]檔案名[/lidp/priv/zsp/autoeasy/s198030001051.txt],其中[/lidp/priv/zsp/autoeasy]為使用者工作目>錄,[s]為單字元檔案名[198030001051]為使用者IP生成的id字元串,[.txt]為檔案的字尾名。
工作目錄是使用者在注冊的時候指定的,一般為個人私人目錄下的autoeasy目錄。
id字元串由ip字元串按段格式化為3位數字組成,例如ip[198.30.1.51]生成的id為[198030001051]。id字元串隻是為了區分不同的使用者,我們都是通過單字元調用檔案,實際操作中不會讓使用者輸入id字段
。
檔案字尾名除了[g]檔案為[.sh],其他檔案的字尾名都是[.txt]。
3.文法規則
[ae SF],SF表示單字元檔案名,後面用法相同。
4.常用指令
指令 指令說明 示例展示
ae s 檢視臨時檔案s的全路徑檔案名 /lidp/priv/zsp/autoeasy/s198030001051.txt
ae a 檢視臨時檔案a的全路徑檔案名 /lidp/priv/zsp/autoeasy/a198030001051.txt
ae d 檢視臨時檔案d的全路徑檔案名 /lidp/priv/zsp/autoeasy/d198030001051.txt
ae g 檢視臨時檔案g的全路徑檔案名 /lidp/priv/zsp/autoeasy/g198030001051.sh
ae c 檢視庫檔案c的全路徑檔案名 /lidp/priv/zsp/autoeasy/c198030001051.txt
ae p 檢視庫檔案p的全路徑檔案名 /lidp/priv/zsp/autoeasy/p198030001051.txt
ae b 檢視庫檔案b的全路徑檔案名 /lidp/priv/zsp/autoeasy/b198030001051.txt
ae f 檢視庫檔案f的全路徑檔案名 /lidp/priv/zsp/autoeasy/f198030001051.txt
ae z 檢視工具庫檔案z的全路徑檔案名 /lidp/priv/zsp/autoeasy/z198030001051.txt
3.2 type檢視檔案類型
1.使用說明
工具對每個檔案都指定了檔案類型,目的是友善使用者對檔案分類使用。檔案類型都用數字表示。檔案類型:1-臨時檔案txt,2-臨時檔案sh,3-庫檔案,4-系統庫檔案,0-非工具檔案。一般通過這個指令>在腳本中判斷使用者輸入的是不是工具的檔案名,以及輸入的檔案名類型。
另外工具對鏡像檔案也規定了檔案類型,檔案類型是其非鏡像檔案的負數,例如[.s]檔案的檔案類型是[-1]。由于鏡像檔案隻被工具本身使用,是以就沒必要介紹其詳細用法了。
2.文法規則
[ae type SF]
3.常用指令
指令 指令說明 輸出類型值
ae type s 檢視臨時檔案s的檔案類型 1
ae type a 檢視臨時檔案a的檔案類型 1
ae type d 檢視臨時檔案d的檔案類型 1
ae type g 檢視臨時檔案g的檔案類型 2
ae type c 檢視庫檔案c的檔案類型 3
ae type p 檢視庫檔案p的檔案類型 3
ae type b 檢視庫檔案b的檔案類型 3
ae type f 檢視庫檔案f的檔案類型 3
ae type z 檢視工具庫檔案z的檔案類型 4
ae type o 檢視不存在的工具檔案類型 0
3.3 cat列印檔案内容
1. 使用說明
通過cat指令将檔案内容列印在螢幕,如果是臨時檔案則檢視全部文本内容,如果是庫檔案則檢視全部标簽。
2. 文法規則
[ae SF cat]
3. 常用指令
指令 指令說明 等價說明
ae s cat 檢視s檔案内容,等價于 cat $(ae s)
ae d cat 檢視d檔案内容,等價于 cat $(ae d)
ae a cat 檢視a檔案内容,等價于 cat $(ae a)
ae g cat 檢視g檔案内容,等價于 cat $(ae g)
ae c cat 檢視c檔案的全部标簽,等價于 grep "^#:" $(ae c)
ae p cat 檢視p檔案的全部标簽,等價于 grep "^#:" $(ae p)
ae b cat 檢視b檔案的全部标簽,等價于 grep "^#:" $(ae b)
ae f cat 檢視f檔案的全部标簽,等價于 grep "^#:" $(ae f)
ae z cat 檢視z檔案的全部标簽,等價于 grep "^#:" $(ae z)
ae c cat str 檢視c檔案标簽行中含有字元串str的标簽,等價于 grep "^#:" $(ae c)|grep str
ae p cat str 檢視p檔案标簽行中含有字元串str的标簽,等價于 grep "^#:" $(ae p)|grep str
ae b cat str 檢視b檔案标簽行中含有字元串str的标簽,等價于 grep "^#:" $(ae b)|grep str
ae f cat str 檢視f檔案标簽行中含有字元串str的标簽,等價于 grep "^#:" $(ae f)|grep str
ae z cat str 檢視z檔案标簽行中含有字元串str的标簽,等價于 grep "^#:" $(ae z)|grep str
3.4 vi/view打開編輯檔案内容
1.使用說明
用vi編輯器打開指定檔案,該指令隻能作用于使用者臨時檔案。用view編輯器打開指定檔案,該指令既可以打開臨時檔案也可以打開庫檔案。打開庫檔案的時候不建議對檔案進行強制編輯儲存,庫檔案有自
己的一套修改方法,後面會做具體介紹。
2.文法規則
[ae SF vi]:編輯打開檔案
[ae SF view]:檢視打開檔案
3.常用指令
指令 指令說明 等價說明
ae s vi 用vi打開s檔案 vi $(ae s)
ae d vi 用vi打開d檔案 vi $(ae d)
ae a vi 用vi打開a檔案 vi $(ae a)
ae g vi 用vi打開g檔案 vi $(ae g)
ae s view 用view打開s檔案 view $(ae s)
ae d view 用view打開d檔案 view $(ae d)
ae a view 用view打開a檔案 view $(ae a)
ae g view 用view打開g檔案 view $(ae g)
ae c view 用view打開c檔案 view $(ae c)
ae p view 用view打開p檔案 view $(ae p)
ae b view 用view打開b檔案 view $(ae b)
ae f view 用view打開f檔案 view $(ae f)
ae z view 用view打開z檔案 view $(ae z)
3.5 trun清空臨時檔案
1.使用說明
清空臨時檔案。
2.文法規則
[ae SF trun]
3.常用指令
指令 指令說明 等價說明
ae s trun 清空s檔案 >$(ae s)
ae d trun 清空d檔案 >$(ae d)
ae a trun 清空a檔案 >$(ae a)
ae g trun 清空g檔案 >$(ae g)
3.6 bak庫檔案備份
1.使用說明
個人庫檔案存放資訊量較大,為了確定檔案資訊安全,需要經常對庫檔案進行備份。備份檔案存放在源檔案所在目錄下的toolbak目錄,備份檔案名為目前檔案名加上時間戳。如果想将備份檔案儲存在其他>系統,那麼需要使用者自己寫sh腳本,通過庫檔案腳本指令将檔案上傳到其他伺服器。
2.文法規則
[ae bak]:
[ae toolbak]:
3.常用指令
指令 指令說明
ae bak 備份個人庫檔案到工作目錄下的toolbak目錄.
ae toolbak 備份工具庫檔案autoeasy.txt和工具本身autoeasy.sh到工具部署目錄下的toolbak目錄
4. 用法展示
下圖展示了備份檔案的基本操作過程:
PL3:/lidp>cd $(ae home)
PL3:/lidp/priv/zsp/autoeasy>ls -lrt
-rw-r--r-- 1 lidp oinstall 422973 May 31 08:32 c198030001051.txt
-rw-r--r-- 1 lidp oinstall 273 May 31 08:37 a198030001051.txt
-rw-r--r-- 1 lidp oinstall 0 May 31 10:52 d198030001051.txt
-rw-r--r-- 1 lidp oinstall 372656 May 31 11:06 b198030001051.txt
-rwxr--r-- 1 lidp oinstall 245 May 31 16:10 g198030001051.sh
-rw-r--r-- 1 lidp oinstall 3542653 Jun 1 08:53 f198030001051.txt
-rw-r--r-- 1 lidp oinstall 6525 Jun 1 08:53 s198030001051.txt
PL3:/lidp/priv/zsp/autoeasy>ae toolbak
bak success!
PL3:/lidp/priv/zsp/autoeasy>ls -lrt toolbak
-rw-r--r-- 1 lidp oinstall 186357 Jun 1 11:19 p198030001051.txt.20180601111908
-rw-r--r-- 1 lidp oinstall 3542653 Jun 1 11:19 f198030001051.txt.20180601111908
-rw-r--r-- 1 lidp oinstall 422973 Jun 1 11:19 c198030001051.txt.20180601111908
-rw-r--r-- 1 lidp oinstall 372656 Jun 1 11:19 b198030001051.txt.20180601111908
PL3:/lidp/priv/zsp/autoeasy>cd $(ae toolhome)
PL3:/lidp/priv/zsp/shbin>ls -lrt
-rw-r--r-- 1 lidp oinstall 40813 May 31 09:16 autoeasy.txt
-rwxr--r-- 1 lidp oinstall 46104 Jun 1 09:26 autoeasy.sh
PL3:/lidp/priv/zsp/shbin>ae toolbak
toolbak success!
PL3:/lidp/priv/zsp/shbin>ls -lrt toolbak
-rw-r--r-- 1 lidp oinstall 40813 Jun 1 11:20 autoeasy.txt.20180601112010
-rwxr--r-- 1 lidp oinstall 46104 Jun 1 11:20 autoeasy.sh.20180601112010
3.7 cp拷貝檔案
1.使用說明
将指定檔案拷貝到臨時檔案,其中cp指令是隐含調用的。該功能實作将右檔案拷貝到左檔案,如果右檔案是庫檔案則将該庫檔案的所有标簽拷貝到左檔案,否則将右檔案的全部文本内容拷貝到左檔案。
左檔案必須是使用者臨時檔案[asdg],該功能隻能把其他檔案拷貝到臨時檔案,而不能把臨時檔案拷貝到其他檔案。右檔案如果使用者臨時檔案,則直接用單字元檔案名表示[asdg]。如果是普通文本檔案,則
直接輸入該檔案名。右檔案如果是庫檔案,則直接輸入庫檔案的單字元檔案名,工具會自動把右檔案的所有标簽拷貝到臨時檔案。
2.文法規則
[ae 左檔案 右檔案]
[ae SF SF]
左檔案必須是[asdg],右檔案可以是[asdgcpbf],也可以是普通文本檔案。
3.常用指令
指令 指令說明 等價說明
ae s d 将d臨時檔案的内容拷貝到s臨時檔案 cp $(ae s) $(ae d)
ae s a 将a臨時檔案的内容拷貝到s臨時檔案 cp $(ae s) $(ae a)
ae s g 将g臨時檔案的内容拷貝到s臨時檔案 cp $(ae s) $(ae g)
ae a s 将s臨時檔案的内容拷貝到a臨時檔案 cp $(ae a) $(ae s)
ae d s 将s臨時檔案的内容拷貝到d臨時檔案 cp $(ae d) $(ae s)
ae g s 将s臨時檔案的内容拷貝到g臨時檔案 cp $(ae g) $(ae s)
ae s test.c 将檔案test.c的全部文本内容拷貝到s臨時檔案 cp test.c $(ae s)
ae a test.c 将檔案test.c的全部文本内容拷貝到a臨時檔案 cp test.c $(ae a)
ae d test.c 将檔案test.c的全部文本内容拷貝到d臨時檔案 cp test.c $(ae d)
ae g test.c 将檔案test.c的全部文本内容拷貝到g臨時檔案 cp test.c $(ae g)
ae s c 将c庫檔案的全部标簽拷貝到s臨時檔案 ae c cat >$(ae s)
ae a p 将p庫檔案的全部标簽拷貝到a臨時檔案 ae p cat >$(ae a)
ae d b 将b庫檔案的全部标簽拷貝到a臨時檔案 ae b cat >$(ae d)
ae g f 将f庫檔案的全部标簽拷貝到a臨時檔案 ae f cat >$(ae g)
标簽級别拷貝: (具體用法參考1.4庫檔案資訊管理)
ae c s 将s臨時檔案的标簽内容儲存或替換c使用者庫檔案對應标簽的内容
ae p s 将s臨時檔案的标簽内容儲存或替換p使用者庫檔案對應标簽的内容
ae b s 将s臨時檔案的标簽内容儲存或替換b使用者庫檔案對應标簽的内容
ae f s 将s臨時檔案的标簽内容儲存或替換f使用者庫檔案對應标簽的内容
ae z s 将s臨時檔案的标簽内容儲存或替換z系統庫檔案對應标簽的内容,隻有工具管理者才有此權限,普通使用者沒有權限進行該操作.
ae c tagname 檢視c庫檔案tagname标簽的内容,将标簽内容列印在螢幕同時拷貝在s臨時檔案,标簽隻能拷貝到s臨時檔案不能拷貝到其他臨時檔案
ae p tagname 檢視p庫檔案tagname标簽的内容,并将标簽内容拷貝到s檔案
ae b tagname 檢視b庫檔案tagname标簽的内容,并将标簽内容拷貝到s檔案
ae f tagname 檢視f庫檔案tagname标簽的内容,并将标簽内容拷貝到s檔案
ae z tagname 檢視z庫檔案tagname标簽的内容,并将标簽内容拷貝到s檔案
3.8 diff比較臨時檔案差異
1.使用說明
比較臨時檔案差異。
2.文法規則
[ae SF SF diff]
3.常用指令
指令 指令說明 等價說明
ae s d diff 比較s檔案和d檔案的異同 diff $(ae s) $(ae d)
ae s a diff 比較s檔案和a檔案的異同 diff $(ae s) $(ae a)
ae d s diff 比較d檔案和s檔案的異同 diff $(ae d) $(ae s)
ae d a diff 比較d檔案和a檔案的異同 diff $(ae d) $(ae a)
ae a s diff 比較a檔案和s檔案的異同 diff $(ae a) $(ae s)
ae a d diff 比較a檔案和d檔案的異同 diff $(ae a) $(ae d)
第4章 庫檔案資訊管理
4.1 AE标簽介紹
AE庫檔案以标簽為機關進行資訊管理,一個完整的标簽由"标簽名",“标簽類型”,“标簽描述”,"标簽文本"四部分組成。其中除标簽名以外,其他幾個部分都是非必須項,但一個完整的結構有利于後續查
詢和維護。
1.标簽名
标簽名必須是由英文字母、數字和下劃線(_)組成的字元串,标簽名是對整個文本内容起的名字,一般用有意義的英文或者數字表示。
2.标簽類型
标簽類型是對标簽種類的劃分,除系統定義的标簽類型之外,使用者也可以自己定義标簽類型。目前系統隻設定了兩種内部标簽類型[sh]和[const]。[const]類型辨別的腳本,不可以通過标簽的[del]指令>删除。[sh]辨別的腳本表示該标簽内容是腳本程式,可以通過工具的[sh]指令執行該腳本。
3.标簽描述
标簽描述是整個标簽文本的概要描述,清晰的标簽描述友善以後查詢和使用。另外标簽描述還有利于标簽的檢索,能夠友善快速查找到一些記憶模糊的标簽名。
4.标簽文本
标簽文本就是标簽的全部内容,也是整個标簽的主體。我們工作中接觸到的所有文本資訊,都可以作為标簽文本。包括項目需求文檔,詳細設計文檔,資料庫表結構資訊,上線資訊,客戶聯系方式等等。
5.标簽使用示例
下面展示了一個表結構的标簽資訊:
#:t_zero_sys_inf:table:地方授權支付-主要檔參數表 表維護:0504
fina_code CHAR 4 财政代碼
fina_name VARCHAR2 48 财政名稱
coun_code VARCHAR2 20 國庫代碼
buss_switch CHAR 1 業務開關 不可空,0-關;1-開
buss_type CHAR 4 業務流程方式([0]0-手工導盤,1-電子直聯)
clr_flag CHAR 1 清算标志 不可空,0-未清算;1-已清算
4.2 AE标簽指令彙總
下表展示了标簽的常用指令,不同指令都有具體的使用場景。
指令 指令說明 使用場景
ae c s 将s臨時檔案的标簽内容儲存或替換c使用者庫檔案的内容 标簽新增/修改
ae p s 将s臨時檔案的标簽内容儲存或替換p使用者庫檔案的内容 标簽新增/修改
ae b s 将s臨時檔案的标簽内容儲存或替換b使用者庫檔案的内容 标簽新增/修改
ae f s 将s臨時檔案的标簽内容儲存或替換f使用者庫檔案的内容 标簽新增/修改
ae z s 将s臨時檔案的标簽内容儲存或替換z系統庫檔案的内容 标簽新增/修改
ae c tag 檢視c庫檔案tagname标簽的内容 标簽查詢
ae p tag 檢視p庫檔案tagname标簽的内容 标簽查詢
ae b tag 檢視b庫檔案tagname标簽的内容 标簽查詢
ae f tag 檢視f庫檔案tagname标簽的内容 标簽查詢
ae z tag 檢視z庫檔案tagname标簽的内容 标簽查詢
ae c tag del 删除c檔案的tag内容 标簽删除
ae p tag del 删除p檔案的tag内容 标簽删除
ae b tag del 删除b檔案的tag内容 标簽删除
ae f tag del 删除f檔案的tag内容 标簽删除
ae z tag del 删除z檔案的tag内容 标簽删除
ae c tag del 0 以安靜模式删除c檔案的tag标簽 标簽删除
ae p tag del 0 以安靜模式删除p檔案的tag标簽 标簽删除
ae b tag del 0 以安靜模式删除b檔案的tag标簽 标簽删除
ae f tag del 0 以安靜模式删除f檔案的tag标簽 标簽删除
ae z tag del 0 以安靜模式删除z檔案的tag标簽 标簽删除
4.3 AE标簽新增
标簽新增即标簽的建立和儲存,是庫檔案文本内容的唯一來源。庫檔案隻與[s]臨時檔案進行資訊互動,通過指令[ae s vi]在s檔案中建立标簽,然後通過[ae f s]指令将标簽儲存到指定的庫檔案。
如果想把一個文本檔案儲存到庫檔案中,隻需要通過[ae s filename]将檔案拷貝到s臨時檔案,然後通過[ae s vi]給臨時檔案加上标簽,最後通過[ae f s]指令将标簽儲存到指定庫檔案。
新增标簽工具不給出是否新增的提示,直接将标簽儲存到庫檔案。如果庫檔案中已經存在同名标簽則會給出是否覆寫的提示。如果兩個标簽文本沒有對應關系,則必須修改标簽名之後再儲存。
4.4 AE标簽删除
标簽删除即删除庫檔案中的标簽文本,目的是清除庫檔案中的無用資訊。标簽删除需要先查詢到标簽名[tagname],然後通過指令[ae f tagname del]将其删除。為了防止誤删,AE會提醒使用者是否真的打>算删除該标簽,隻有在使用者輸入[y]同意删除之後,AE才會執行删除動作。删除标簽是不可逆的,标簽一旦删除就無法恢複,是以必須慎重使用删除指令。另外平時也要養成備份庫檔案的習慣,一旦誤删>還可以從備份檔案中将标簽手動還原。
另外AE還支援安靜模式删除,即不想收到提示資訊,直接删除指定标簽。這種情況隻需要在上述指令後面加一個[0]參數,即使用指令[ae f tagname del 0]即可直接将标簽文本删除。安靜模式删除風險>更高,使用的時候必須慎重。
4.5 AE标簽查詢
标簽查詢即檢視庫檔案标簽文本内容,這個是最常用的标簽操作。如果知道标簽儲存在哪個庫檔案并且知道标簽名,則可以直接通過指令[ae f tagname]将标簽内容列印在螢幕。這個指令同時會将标簽内
容儲存在[s]臨時檔案,如果需要多次檢視隻需要輸入指令[ae s cat]即可。
如果隻知道标簽的大概描述資訊,則可以先通過模糊查找确定标簽名,然後再按照上述方法檢視标簽内容。模糊查找即通過指令[ae f cat|grep info]檢視含有指定資訊的所有标簽資訊,然後根據描述篩
選出自己想要檢視的标簽名。
如果沒有設定标簽描述或者标簽描述資訊很少,那就隻能通過[ae f view]指令打開整個庫檔案,然後全局搜尋自己想要的文本内容。如果找到就往後翻頁查找文本的标簽名,最後退出就可以通過标簽名>檢視标簽文本了。這種查找方法比較麻煩,為了以後查找友善,在新增标簽的時候一定要養成設定标簽描述的習慣。
4.6 AE标簽修改
标簽修改即修改庫檔案标簽内容,修改标簽可以通過以下幾個步驟來完成。首先通過指令[ae f tagname]把标簽文本取出放到[s]臨時檔案,然後通過[ae s vi]修改标簽文本,最後通過[ae f s]将修改後
的标簽儲存到庫檔案。
儲存标簽的時候AE會提示是否覆寫現有标簽文本,并給出兩個文本的差異資訊。如果确定覆寫則輸入[y],如果不想覆寫輸入[n]。對于不想覆寫的情況,如果還想儲存[s]檔案中的标簽,隻需要給标簽改>一個名字,然後就可以通過[ae f s]儲存标簽了。這種情況相當于新增了一個标簽,這個新增标簽相當于原标簽的更新版。
另外AE不支援安靜模式修改,即不收到提示資訊,直接修改标簽文本内容。如果使用者确實不想收到提示資訊,則可以先通過指令 [ae f tagname del 0]将原标簽文本安靜删除,然後通過[ae f s]将修改>後的标簽儲存在庫檔案。
4.7 AE子标簽
1.子标簽作用
如果一個标簽文本比較大,直接通過标簽檢視文本會比較困難,這個時候可以考慮給該文本設定子标簽,然後通過子标簽來檢視對應的文本資訊。通過設定子标簽可以讓标簽的文本内容結構更加清晰,子
标簽相當于文檔結構圖,使用起來非常友善。
2.子标簽格式
子标簽的格式跟主标簽基本相同。也是有标簽名,标簽類型和标簽描述,标簽文本四個部分組成。但子标簽跟主标簽又有一定的差異,主要展現下如下幾個方面。
3.子标簽跟主标簽的差異
3.1标簽頭的辨別不同。
主标簽用[#:]作為一個标簽開始的标志,子标簽用[–:]作為标簽開始的标志。
3.2标簽名的命名規範程度不同。
主标簽的标簽名命名非常嚴格,子标簽的标簽名命名比較随意。子标簽的标簽名可以使任意字元,中文,特殊字元等。主标簽的标簽名在同一個庫檔案中不可以重名,子标簽的标簽名在同一個檔案甚至同
一個主标簽中都可以重名,對子标簽的命名幾乎沒有任何限制。
3.3标簽個數不同。
一個标簽文本隻能命名一個主标簽,但一個标簽文本可以命名多個子标簽。子标簽不能獨立存在,必須依附于主标簽而存在。子标簽的個數并不是越多越好,如果标簽文本内容不是很多,也可以不設定子
标簽。
3.4. 顯示方式不同。
主标簽檢視标簽文本,文本資訊會自動儲存在[s]臨時檔案。通過子标簽檢視标簽文本資訊,文本資訊隻會列印在螢幕,而不會儲存在[s]臨時檔案。子标簽設定的目的主要是用來檢視資訊的,而不是管理
資訊,是以沒有必要存放在臨時檔案。
4.8 AE子标簽分層
AE子标簽類似word文檔的文檔結構圖,通過命名子标簽可以讓整個标簽文本更有層次感。子标簽分層的多少,以獲得最佳月度體驗為宜。我們設定word文檔結構圖的經驗,完全可以照搬過來用于設定子标
簽。
1.一級子标簽。
一級子标簽用[–:]開頭,可以通過[ae f tag pg]指令檢視一個主标簽的所有一級子标簽資訊,然後通過[ae f tag pg child]檢視某個具體的一級子标簽的文本資訊。一級子标簽的文本包括該子标簽下>的所有文本,如果有命名其他等級的子标簽,也會一并顯示出來。
2.二級子标簽。
二級子标簽用[—:]開頭,可以通過指令[ae f tag pg child pg]指令檢視一個一級子标簽的所有二級子标簽資訊,然後通過[ae f tag pg child pg child]指令檢視一個二級子标簽的文本資訊。二級子
标簽的文本資訊,同樣包括其下命名的其他登記的子标簽。
3.三級子标簽。
三級子标簽用[----:]開頭,可以通過指令[ae f tag pg child pg child pg]指令檢視一個二級子标簽的所有三級子标簽資訊,然後通過[ae f tag pg child pg child pg child]指令檢視一個三級子标>簽的标簽文本。
4. n級子标簽。
子标簽每增加一級就在标簽辨別前面增加一個[-]符号,一般情況下超過三級的子标簽基本不會用到。子标簽并不是設定的越多越好,一般設定到兩三個螢幕能夠顯示完一個子标簽的内容為最佳。太多的>子标簽隻會讓查詢的指令非常長,操作起來非常的不友善。
5. 子标簽結構圖示例
下面展示一個子标簽的基本簡圖:
#:tagname:doc:主标簽描述資訊
---------------------------------------------------------------------------------
--:1:第1個一級子标簽
---------------------------------------------------------------------------------
content1
---:1.1:第1個二級子标簽
content1.1
----:1.1.1:第1個三級子标簽
content1.1
----:1.1.2:第2個三級子标簽
content1.1
content1.1
---:1.2:第2個二級子标簽
content1
-----------------------------------------------------------------------------------
--:2:第2個一級子标簽
---------------------------------------------------------------------------------
content2
---:2.1:二級子标簽
content2
---:2.2:二級子标簽
content2
---------------------------------------------------------------------------------
--:3:第3個一級子标簽
---------------------------------------------------------------------------------
content3
content3
content3
4.9 AE子标簽新增修改及删除
AE子标簽必須依附主标簽而存在,AE沒有設定單獨的指令來修改子标簽。如果要修改子标簽的内容,必須先通過指令[ae f tag]将整個标簽拿到[s]臨時檔案,然後通過[ae s vi]編輯标簽内容。可以通過
子标簽名搜尋子标簽的位置,然後修改子标簽。修改完儲存退出之後,通過[ae f s]指令将整個标簽文本儲存到庫檔案。修改子标簽即修改對應的主标簽,具體操作可參照文檔主标簽的相應子產品。
子标簽的新增和删除也相當于修改主标簽,新增的時候隻需要按照子标簽的配置規則配置子标簽即可,删除的時候也隻需要删除該子标簽的辨別。
4.10 AE子标簽常用指令
指令 指令說明 備注
ae f tag pg 檢視f庫檔案tag标簽的所有一級子标簽
ae b tag pg 檢視b庫檔案tag标簽的所有一級子标簽
ae c tag pg 檢視c庫檔案tag标簽的所有一級子标簽
ae p tag pg 檢視p庫檔案tag标簽的所有一級子标簽
ae z tag pg 檢視z庫檔案tag标簽的所有一級子标簽
ae f tag pg c1 檢視f庫檔案tag标簽的c1一級子标簽文本
ae b tag pg c1 檢視b庫檔案tag标簽的c1一級子标簽文本
ae c tag pg c1 檢視c庫檔案tag标簽的c1一級子标簽文本
ae p tag pg c1 檢視p庫檔案tag标簽的c1一級子标簽文本
ae z tag pg c1 檢視z庫檔案tag标簽的c1一級子标簽文本
ae f tag pg c1 pg 檢視f庫檔案tag标簽的c1一級子标簽的所有二級子标簽
ae f tag pg c1 pg c1.1 檢視f庫檔案tag标簽的c1一級子标簽的c1.1二級子标簽的文本資訊
ae f tag pg c1 pg c1.1 pg 檢視f庫檔案tag标簽的c1一級子标簽的c1.1二級子标簽的所有三級子标簽 很少用
ae f tag pg c1 pg c1.1 pg c1.1.1 檢視f庫檔案tag标簽的c1一級子标簽的c1.1二級子标簽的c1.1.1三級子标簽的文本内容 很少用
ae f tag pg c1 pg c1.1 pg c1.1.1…… 多級子标簽查詢 很少用
4.11 AE子标簽應用示例
AE子标簽的一個典型應用場景,就是維護需求開發計劃文檔。如果收到一份小的開發需求,可以直接給這個需求定義一個标簽,然後把自己的開發測試過程,源碼清單,需求文檔,接口文檔等資訊,都通過子标簽記錄下來。通過需求标簽,我們就可以随時随地檢視需求内容及開發進度。通過标簽和子标簽的互相配合,整個需求開發過程就一目了然。以後任何時候想檢視這個需求的開發資訊,都隻需要一條指令就可以跟蹤整個需求開發過程了。
下圖展示了一份普通的需求開發标簽文本資訊:
#:0072_5:requre:G:\2018req\20180151-黃埔區授權支付項目需求(2018年3月2日)
--------------------------------------------------------------------------------
--:1:源碼清單
--------------------------------------------------------------------------------
1.前端
......
2.背景
......
3.參數配置
......
--------------------------------------------------------------------------------
--:2:開發測試
--------------------------------------------------------------------------------
1.代扣費
......
2.定期借記及集中代付
......
3.0510
......
<此處省略100行>
......
--------------------------------------------------------------------------------
--:3:<<需求資訊--黃埔區授權支付項目需求(2018年3月2日)>>
--------------------------------------------------------------------------------
需求詳細資訊
......
<此處省略50行>
......
--------------------------------------------------------------------------------
--:4:需求42/<<附件:黃埔支行授權支付項目需求>>
--------------------------------------------------------------------------------
需求詳情:
......
<此處省略400行>
......
--------------------------------------------------------------------------------
第5章 庫檔案腳本管理
5.1 AE腳本标簽介紹
标簽文本類型如果設定為[sh]類型,則表示該标簽文本為腳本程式,我們把這樣的标簽稱為腳本标簽。腳本标簽從文本的角度來看,跟普通标簽沒有任何差別,支援文本标簽的全部操作指令。腳本标簽在普通标簽的基礎上增加了可執行權限,可以實作普通sh腳本的所有功能。通過工具對腳本标簽的統一管理,能夠讓sh腳本實作各種強大的功能,最終能讓我們的工作實作自動化。
5.2 AE臨時檔案腳本執行
AE臨時檔案内容,如果是腳本指令,是可以通過AE直接執行的。臨時檔案執行的文法規則統一為[ae SF sh],但對不同類型的臨時檔案,執行過程有一些差異。
1.[asd]臨時檔案腳本執行
對于[asd]臨時檔案,工具首先把臨時檔案内容拷貝到系統的[s]鏡像檔案,然後檢索[s]鏡像檔案有沒有AE的特殊文法變量,如果有就先執行AE的特殊文法。最後将[s]鏡像檔案内容拷貝到[g]鏡像檔案并>執行該鏡像檔案。
2.[g]臨時檔案腳本執行
使用者[g]檔案是可執行臨時檔案,工具會直接運作[g]檔案來執行裡面的腳本指令。可以把[g]檔案了解為普通的sh腳本檔案,AE不對該檔案提供任何特殊文法支援。
3.臨時檔案腳本跟标簽腳本差異
由于臨時檔案内容經常被覆寫或删除,如果想作為常用的工具腳本就必須儲存在庫檔案中。庫檔案的标簽腳本是比較穩定的,如果使用者不強制删除,就會一直存在。
4.臨時檔案執行指令彙總
指令 指令說明 是否提供特殊文法支援
ae s sh 執行s臨時檔案中的文本腳本 是
ae a sh 執行a臨時檔案中的文本腳本 是
ae d sh 執行d臨時檔案中的文本腳本 是
ae g sh 執行g臨時檔案中的文本腳本 否
5.3 AE标簽腳本的執行過程
AE标簽腳本的執行過程跟臨時檔案腳本的執行過程基本相同,隻是腳本指令的來源存在差異。臨時檔案腳本指令來源于臨時檔案文本,腳本标簽的指令來源于标簽本身。
當執行标簽腳本的時候,工具會首先将标簽腳本的文本内容拷貝到[s]鏡像檔案,然後從[s]鏡像檔案拷貝到[g]鏡像檔案,最後執行[g]鏡像檔案。
如果執行指令帶上了參數則工具會使用使用者輸入參數,如果沒有帶任何參數,則工具會自動檢測腳本文本的"動态參數提醒"字元串,按照提示動态擷取參數。
在腳本标簽内容從[s]鏡像檔案拷貝到[g]鏡像檔案之前,工具會自動檢測腳本文本中的"導入庫函數指令",将相應函數提取到[g]鏡像檔案,然後再将[s]鏡像檔案的文本内容追加到[g]鏡像檔案。
腳本标簽執行指令彙總:
指令 指令說明 庫函數導入 動态參數
ae b hello sh 執行b庫檔案的hello标簽腳本 支援 支援
ae b hello sh para 執行b庫檔案的hello标簽腳本 支援 不支援
ae f hello sh 執行f庫檔案的hello标簽腳本 支援 支援
ae f hello sh para 執行f庫檔案的hello标簽腳本 支援 不支援
ae c hello sh 執行c庫檔案的hello标簽腳本 支援 支援
ae c hello sh para 執行c庫檔案的hello标簽腳本 支援 不支援
ae p hello sh 執行p庫檔案的hello标簽腳本 支援 支援
ae p hello sh para 執行p庫檔案的hello标簽腳本 支援 不支援
ae z hello sh 執行z庫檔案的hello标簽腳本 支援 支援
ae z hello sh para 執行z庫檔案的hello标簽腳本 支援 不支援
5.4 AE腳本标簽tippara動态參數及para參數擷取
1. 文法說明
腳本中可以通過定義tippara變量,然後通過para指令動态擷取腳本的執行參數。tippara變量是按照逗号分隔的普通字元串,每段表示一個提示資訊。tippara變量的基本格式為"提示資訊1,提示資訊2,提示資訊3…"。一個标簽腳本可以定義多個tippara變量,tippara變量的順序對應[para]指令的第一個參數,上面提示資訊的位置對應[para]指定的第二個參數。
[para]指令的基本文法是[ae para n m],n和m均為數字,n表示腳本檔案中tippara出現的順序,m表示一個tippara變量的提示資訊的位置。如果指定的tippara變量不存在或者指定位置的提示資訊不存在
則該指令傳回空值。
2.擷取參數指令彙總:
指令 指令說明
ae para 1 1 擷取使用者第1個tippara變量的第1個提示資訊參數
ae para 1 2 擷取使用者第1個tippara變量的第2個提示資訊參數
ae para 1 3 擷取使用者第1個tippara變量的第3個提示資訊參數
ae para 2 1 擷取使用者第2個tippara變量的第1個提示資訊參數
ae para 2 2 擷取使用者第2個tippara變量的第2個提示資訊參數
ae para 2 3 擷取使用者第2個tippara變量的第3個提示資訊參數
ae para 3 1 擷取使用者第3個tippara變量的第1個提示資訊參數
ae para 3 2 擷取使用者第3個tippara變量的第2個提示資訊參數
ae para 3 3 擷取使用者第3個tippara變量的第3個提示資訊參數
ae para 1 1 擷取使用者第1個tippara變量的第1個提示資訊參數
ae para 1 2 擷取使用者第1個tippara變量的第2個提示資訊參數
3.tippara變量定義要求
tippara變量必須作為一行的開頭,變量名前面不能出現其他任何字元,變量名必須小寫。變量中的不同提示資訊之間必須用逗号分隔,同一個提示資訊中不能再出現逗号字元,如果出現工具會自動當做>兩條提示資訊來處理。
4.動态參數用法舉例
#:hello:sh:測試腳本
------------------------------------------
tippara="請輸入姓名(def:張三),請輸入年齡(def:30)"
......
tippara="請輸入性别(def:男)"
......
tippara="請輸入手機号(def:10086),請輸入位址(eg:廣州)"
......
p11=$(ae para 1 1) --> 張三
p12=$(ae para 1 2) --> 30
p13=$(ae para 1 3) --> ""
p21=$(ae para 2 1) --> 男
p22=$(ae para 2 2) --> ""
p23=$(ae para 2 3) --> ""
p31=$(ae para 3 1) --> 10086
p32=$(ae para 3 2) --> 廣州
p33=$(ae para 3 3) --> ""
5.5 AE腳本标簽importinfo庫函數導入
1.文法說明
腳本中可以定義[importinfo]變量來導入已經寫好的腳本函數或指令,importinfo是一個普通的字元串變量,變量中存儲的是AE指令,多個指令之間用逗号分隔。importinfo變量的基本格式為"指令1,指令2,指令3…"。
一個标簽腳本可以定義多個importinfo變量,一個importinfo變量又可以定義多條指令,工具在将腳本指令從[s]鏡像檔案拷貝到[g]鏡像檔案之前自動運作每條指令,然後将運作結果追加到[g]鏡像檔案>,最後才将标簽腳本内容追加進來。
通過importinfo導入庫函數經常會與子标簽指令[pg]一起使用,任何檔案隻要将一個函數定義為子标簽就可以通過importinfo變量引入到目前标簽腳本中。
3.importinfo變量定義要求
importinfo變量必須作為一行的開頭,變量簽名前面不能出現其他任何字元,變量名必須小寫。變量中的不同指令之間必須用逗号分隔,同一個指令中不能再出現逗号,如果出現工具會自動當做兩條指令
來處理。
4.相比較定義多個标簽腳本的優勢
AE标簽腳本運作标簽外的腳本有兩種方式,一個是将标簽外的腳本也命名成标簽腳本,然後通過目前标簽腳本調用另外一個标簽腳本。另外一種方式是将目前标簽外的腳本定義成子标簽,然後通過importinfo引入到目前腳本程式中。兩種方式各有自己的優缺點,通過importinfo引入的方式有如下優點。
首先可以讓一個标簽腳本的功能更加完善,結構更加清晰,通過一個标簽就可以跟蹤整個執行過程。
其次運作開銷小,通過函數引用最終隻會運作一個腳本,最終執行的腳本會儲存在[g]鏡像檔案中,萬一報錯還可以直接查詢原因。如果通過标簽腳本的彼此調用來實作,則[g]鏡像檔案會被後面執行的腳
本覆寫,之前的腳本标簽出錯原因就沒辦法跟蹤了。
最後是便于更新和維護,如果發現某個函數有缺陷隻需要修改這個函數即可,其他引用的地方都可以得到最終更新的函數。
5.用法示例
#:hello:sh:測試腳本
------------------------------------------
importinfo=" ae c shell_fun pg isdigit , ae c shell_fun pg isin"
......
importinfo =" ae c shell_fun pg lower "
......
上面腳本在運作之前工具會自動檢測運作importinfo中的指令,然後把運作結果追加到最終的執行腳本中。
5.6 AE标簽腳本注釋文法
AE标簽腳本中可以使用[#]表示注釋,這種注釋方法跟普通shell腳本的用法完全相同,另外标簽腳本還把以[-]開頭的行作為注釋,标簽腳本内容在從[s]鏡像檔案拷貝到[g]鏡像檔案之前會自動将以[-]開
頭的行替換為以[#]開頭。這種特殊設定是為了讓标簽腳本支援子标簽的特殊文法,同時通過[--------]對标簽腳本内容分層可以讓腳本的結構變得清晰美觀。
5.7 echo反向腳本指令生成
[echo]指令可以讓臨時檔案内容轉化為可以反向生成自己的腳本指令,通過這個指令可以生成一個複雜腳本的原始架構。在這個架構的基礎上,隻需要對一些關鍵細節做些調整就可以生成一個完美的标簽
腳本了。
[echo]的基本文法規則為[ae SF echo],SF隻包括臨時檔案,具體指令如下。
指令 指令說明
ae s echo 輸出s檔案的反向生成自己的腳本指令
ae d echo 輸出d檔案的反向生成自己的腳本指令
ae a echo 輸出a檔案的反向生成自己的腳本指令
ae g echo 輸出g檔案的反向生成自己的腳本指令
5.8 AE子标簽腳本
AE子标簽腳本的運作過程跟普通标簽腳本的運作過程基本相同,都是先找到對應的标簽文本,将其拷貝到[s]鏡像檔案,然後将其拷貝到[g]鏡像檔案,并在拷貝之前提供一些特殊文法支援,最後運作[g]>可執行程式。但由于子标簽隻是整個主标簽的一部分,子标簽完全獨立于其他文本内容獨立運作,是以子标簽腳本有自己的特性。
5.9 AE子标簽特性
1.靈活性
子标簽可以寄生在任意類型的主标簽中,并不要求主标簽必須是[sh]類型。隻要子标簽的内容是腳本代碼,并且有自己的名字,就可以通過指令[ae f tag pg child sh]指令執行該子标簽。
2. 局部代碼測試
對于一個比較大的腳本,如果隻想測試其中某一段代碼,那麼可以通過給這段代碼打上子标簽,然後通過子标簽執行指令運作該段代碼。同時配合[tippara]動态參數可以給這段代碼輸入任何參數,測試>起來非常友善。
3.可複用性
由于子标簽具有獨立運作特性,如果把一段特殊用途代碼編寫成腳本函數,然後給該函數設定子标簽,最後就可以對這個函數進行單獨測試了。如果确定這個函數運作正常,并且适合在多種場合下使用,
那麼就可以給這個函數編寫一個有意義的子标簽名,其他任何地方就可以通過[importinfo]變量引用這個函數,達到子标簽複用的效果。
4.可維護性
大多數情況下如果一個主标簽中含有子标簽腳本,這個主标簽基本都是用來儲存維護子标簽的,可以不作為标簽腳本運作,隻用來儲存标簽腳本的庫函數。通過一個主标簽我們就可以維護大量的
子标簽腳本函數,其他主标簽腳本可以自由選擇從目前主标簽腳本庫用引用函數。
5.10 AE标簽腳本基本用法示例
下圖展示了一個通過标簽腳本實作的,可以在系統任意位置測試c代碼的實作方式。其中[hello1]标簽是主函數,[hello1_lib]标簽是主函數引用的庫函數,[hello2]标簽是對主函數的編譯過程,[hello]标簽調用[hello2]編譯标簽同時執行最終的可執行程式。
實際應用中,通過[ae c hello1]調出主函數,通過[ae s vi]編寫我們需要測試的c代碼,然後通過[ae c s]将代碼儲存在庫檔案,最後通過[ae c hello sh]運作c代碼并檢視代碼的運作結果。
這隻是一個非常簡單的使用用标簽和标簽腳本的示例,後續通過系統提供的基本支援,我們可以很輕松的編寫出非常強大的應用來。
#:hello1:c:c程式hello.c源碼
#include<stdio.h>
#include<math.h>
#include<string.h>
int
main(int argc,char**argv)
{
char sTemp[1024+1];
char sTemp1[1024+1];
char sTemp2[10240+1];
char sTemp3[1024+1];
/* 個人測試代碼 */
printf("hello world!\n");
return 0;
}
#:hello1_lib:lib:庫函數
……
#:hello2:sh:編譯hello.c生成可執行程式hello
workdir=$(ae home)
cfile=$workdir/hello.c
dfile=$workdir/hello
libfile=$workdir/hello_lib.c
ae c hello1_lib|grep -v "^#:" >$libfile
ae c hello1|grep -v "^#:" >$cfile
echo "cc -o $dfile $cfile"
/usr/bin/rm -f $workdir/*.o $dfile
cc -o $dfile $cfile $libfile
#:hello:sh:編譯生成并執行可執行程式 hello
ae c hello2 sh
execfile=$(ae home)/hello
echo $execfile
echo --------------------------------------------------------------------------------
$execfile
第6章 AE使用者管理
6.1 AE指令運作三種模式
1. 文法說明
AE系統提供了三種使用者指令執行模式,以目前主機IP綁定使用者的預設運作模式,以指定使用者運作單條指令模式和以登陸使用者運作指令模式。每種運作模式都有自己的優缺點,适合在不同的運作場景中使用。使用者通過[ae user]指令可以檢視目前系統的所有注冊使用者,然後根據自己的操作需求選擇任意一種運作模式運作指令。
6.2 預設使用者模式
1. 運作模式介紹
新使用者通過個人主機注冊為AE使用者,就可以直接使用AE工具了。此時通過[ae whoami]指令可以檢視目前使用者,這個使用者是AE系統預設的預設使用者,它是跟自己主機的IP綁定的。AE在執行使用者輸入的指令時會先檢測使用者主機IP,然後根據IP在[z]檔案[aeuserinfo]标簽中查詢使用者注冊資訊,最後以該使用者的身份運作指令。
2. 優缺點
這種方式運作指令最簡單,使用者操作的都是自己的檔案,不用關心對其他使用者産生任何影響。
3. 使用場景
這種模式适合在個人主機上的日常辦公,也是注冊使用者的最常用的使用方式。如果想修改個人注冊資訊,隻能在預設模式下執行。
6.3 指定使用者模式
1.運作模式介紹
使用者可以通過[ae user name]指令,以AE系統中任意注冊使用者的身份運作指令。如果不指定使用者,系統預設以目前主機的預設使用者運作指令。例如[ae s]指令即檢視目前使用者的[s]檔案的全路徑檔案名。如果指定使用者,系統會先查詢[z]檔案[aeuserinfo]标簽該使用者的注冊資訊,然後以該使用者身份運作指令。例如[ae user zhangsuping s]指令即檢視[zhangsuping]使用者的[s]檔案的全路徑檔案名。
2. 優缺點
這種方式使用起來比較靈活,隻要我們知道我們想要的資訊在哪個使用者那裡,就可以直接通過這種模式擷取到我們想要的資訊。但如果我們通過這種方式運作其他使用者寫的腳本,如果其他使用者的腳本中恰好運作了另外一個AE指令,由于該指令沒有指定使用者則其執行結果将無法預測。是以這種方式不太适合運作腳本,隻适合查詢其他使用者的标簽文本資訊。
3. 使用場景
這種方式适合跟其他使用者交換資訊。
6.4 登陸使用者模式
1.運作模式介紹
使用者可以通過[ae user login]指令登陸任意已經注冊的使用者,使用者登陸成功系統會在[z]檔案的登入标簽記錄一條登陸資訊,這樣使用者在每次運作指令的時候系統都會先查詢登陸資訊,如果使用者已經登陸就通過[z]檔案查詢使用者的注冊資訊,最後以登陸使用者的注冊資訊執行該指令。使用者一旦登陸成功,則其執行指令的過程和結果跟在自己主機上使用預設模式的執行結果完全相同。這種方式相當于在他人主機上搭建了一套自己的AE運作環境。
如果使用者想切換回主機的預設使用者,則必須先通過[ae user login]指令登出目前登陸使用者,然後才能使用預設使用者模式執行指令。
工具對所有登陸資訊隻預設當天有效,如果系統時間切換到了第二天,則前一天的登入資訊會自動失效。這樣做的目的是防止使用者由于忘記登出,而自己的賬号被他人使用。
2.優缺點
如果在自己主機登陸他人賬号,頻繁切換就會浪費較多時間。另外登陸資訊隻在當天有效,跨天使用登陸模式就必須重新登陸個人賬号。
3.适合場景
這種方式适合在非本人主機登陸本人賬戶,一般在不友善使用個人主機的場合使用。
6.5 user使用者指令彙總
指令 指令說明 備注
檢視使用者資訊:
ae user 檢視所有使用者注冊資訊
ae user self 檢視目前使用者注冊資訊
ae user zhukebi 檢視使用者zhukebi的注冊資訊
預設使用者模式運作指令
ae s 檢視目前使用者的s檔案全路徑檔案名
ae s cat 檢視目前使用者s檔案内容
ae user modify 使用者資訊修改
ae b hello sh 運作b庫檔案的hello腳本
ae user login 選1輸入使用者名和密碼登陸使用者,進入使用者登陸模式
以指定使用者模式運作指令:
ae user self s 檢視目前使用者的s檔案,等價于[ae s]
ae user zhukebi s 檢視使用者zhukebi的全路徑s檔案,其他所有檔案的檢視用法相同.
ae user zhukebi s cat 檢視使用者zhukebi的s檔案内容,其他臨時檔案内容檢視方法相同
ae user zhukebi f cat 檢視使用者zhukebi的f檔案所有标簽,其他庫檔案檢視方法相同
ae user zhukebi b hello sh 運作使用者zhukebi的b檔案的hello标簽腳本. 存在風險
登陸使用者模式運作指令
ae s 檢視目前登陸使用者的s檔案全路徑檔案名
ae s cat 檢視目前登陸使用者s檔案内容
ae b hello sh 運作登陸使用者b庫檔案的hello腳本
ae user login 選2輸入使用者名和密碼登出使用者,切換回預設使用者模式
第7章 AE格式化文本處理
7.1 文本對齊很重要
如果一段文本是整齊的,那這段文本表達的意思就一目了然。如果一段代碼是整齊的,那這段代碼實作的功能就非常清晰。文本和代碼是否整齊,反映出出一個人的思維是否清晰。隻有思維清晰,才能讓工作變得輕松愉快。AE對文本對齊提供了大量支援,友善我們存儲大量的文本資訊。
7.2 ord臨時檔案文本對齊
通過[ae s ord]指令可以讓臨時檔案文本實作簡單的對齊功能,工具檢測臨時檔案文本,将不同文本按照空白字元劃分為不同的域,根據每列域的最大長度将文本格式化輸出。ord隻是簡單的封裝了awk,但這個功能确是最常用的。下圖展示了一個通過ord指令将交易碼文本對齊的操作。
[ae s cat]列印的是對齊前的文本内容,[ae s ord]列印的是對齊後的文本内容。對齊前的結構式混亂的,對齊後的結構是清晰的。
PL4:/lidp/log/20180525>ae s cat
序号 封包編号 封包說明 行内系統發送方向 說明
1 CZ203 預算機關授權支付明細清單 雙向(财--代) 1
2 CZ213 授權支付彙總額度通知單 雙向(财--代) 1
3 CZ214 直接支付額度到賬通知單 雙向(财--代) 1
4 CZ223 授權支付彙總清算額度通知單 雙向(财--人) 1
5 CZ233 直接支付彙總清算額度通知單 雙向(财--人) 1
6 CZ213 預算機關授權支付額度到賬通知單 雙向(财--代) 1
7 CZ303 電子支付指令(直接、授權、撥款) 雙向(财--代) 1
8 CZ313 電子支付沖銷指令 雙向(财--代) 1
9 CZ323 清算支付指令(直接、授權) 代-->财
10 CZ902 對賬指令 雙向(财--代) 1
PL4:/lidp/log/20180525>ae s ord
序号 封包編号 封包說明 行内系統發送方向 說明
1 CZ203 預算機關授權支付明細清單 雙向(财--代) 1
2 CZ213 授權支付彙總額度通知單 雙向(财--代) 1
3 CZ214 直接支付額度到賬通知單 雙向(财--代) 1
4 CZ223 授權支付彙總清算額度通知單 雙向(财--人) 1
5 CZ233 直接支付彙總清算額度通知單 雙向(财--人) 1
6 CZ213 預算機關授權支付額度到賬通知單 雙向(财--代) 1
7 CZ303 電子支付指令(直接、授權、撥款) 雙向(财--代) 1
8 CZ313 電子支付沖銷指令 雙向(财--代) 1
9 CZ323 清算支付指令(直接、授權) 代-->财
10 CZ902 對賬指令 雙向(财--代) 1
7.3 格式化指令基礎
系統提供了format格式化字元串功能,format代表格式化字元串,其調用是隐式的。工具會讀取[s]臨時檔案中的域資訊,然後通過[format]格式字元串按照指定規則輸出。
系統預設,如果[ae n]指令的第一個參數是數字,則表示該條指令執行格式化處理功能。如果第一個參數是[0]則系統預設将格式化字元串中的[%s]按照域的順序進行對齊替換,如果第一個參數不是[0]則表示将格式化字元串中的所有[%s]都替換為第一個參數指定的域。
格式化字元串中除提供[%s]之外還提供[$n]來替換指定位置上的域,例如[$1]可替換為s檔案中的第1域,[$2]可替換s檔案中的第2域,依次類推。如果想要替換的域不存在,則該位置會用空字元串填充。
針對英文字元類型的域,工具還提供了[<%s<]或者[<$n<]将該位置的域中的字元轉化為小寫字元輸出,以及[>%s>]或者[>$n>]将該位置的域中的字元轉化為大寫字元輸出。
7.4 AE自帶的格式化參數
系統提供了幾個自帶的格式化參數,通過[ae format]指令可以檢視全部的格式化參數。每個格式化字元串系統都給起了一個别名,我們可以直接輸入别名作為參數,也可以直接輸入格式化字元串作為參數。例如[ae 0 strcpy]跟[ae 0 “strcpy(%s,%s);”]兩個指令是完全等價的。
下圖展示了系統自帶的格式化字元串memset使用過程。
/lidp>ae format
memset "memset(%s,0x0,sizeof(%s));"
strcpy "strcpy(%s,%s);"
strncpy "strncpy(%s,%s,sizeof(\$1)-1);"
printf "printf(\"%%s\$n\",%s);"
sprintf "sprintf(%s,\"%%s\",%s);"
cond1 "<!if(c1)then{f1}elif([c2])then{f2}else{f3}!>"
cond2 "<!if([ -vie 1 c1 ]&&[ -vie 2 c2 ]||[-vie 3c3 ])then{f1}elif(c2)then{f2}else{f3}!>"
cond2 "<!if([ -vie 1 c1 ]&&[ -vie 2 c2 ]||[-vie 3c3 ])then{f1}elif(c2)then{f2}else{f3}!>"
/lidp>ae s cat
user_name char 32 使用者名
user_sex char 1 性别
user_phoneno char 16 手機号碼
/lidp>ae 1 memset
memset(user_name ,0x0,sizeof(user_name ));
memset(user_sex ,0x0,sizeof(user_sex ));
memset(user_phoneno,0x0,sizeof(user_phoneno));
/lidp>ae 1 "memset(%s,0x0,sizeof(%s));"
memset(user_name ,0x0,sizeof(user_name ));
memset(user_sex ,0x0,sizeof(user_sex ));
memset(user_phoneno,0x0,sizeof(user_phoneno));
/lidp>ae 1 "memset(%s,0x0,sizeof(%s));/* \$4 */"
memset(user_name ,0x0,sizeof(user_name ));/* 使用者名 */
memset(user_sex ,0x0,sizeof(user_sex ));/* 性别 */
memset(user_phoneno,0x0,sizeof(user_phoneno));/* 手機号碼 */
/lidp>ae 1 "memset(>%s>,0x0,sizeof(>%s>));/* \$3 */"
memset(USER_NAME ,0x0,sizeof(USER_NAME ));/* 使用者名 */
memset(USER_SEX ,0x0,sizeof(USER_SEX ));/* 性别 */
memset(USER_PHONENO,0x0,sizeof(USER_PHONENO));/* 手機号碼 */
/lidp>ae 1 "memset(>\$1>,0x0,sizeof(>\$1>));/* \$3 */"
memset(USER_NAME ,0x0,sizeof(USER_NAME ));/* 使用者名 */
memset(USER_SEX ,0x0,sizeof(USER_SEX ));/* 性别 */
memset(USER_PHONENO,0x0,sizeof(USER_PHONENO));/* 手機号碼 */
7.5 域條件判斷
上面示例代碼中幾個域都是字元串,是以使用簡單的格式字元串就可以處理。如果域的類型比較複雜,那就必須借助條件判斷來實作格式化輸出了。
AE工具通過對不同的域提供條件判斷支援,來選擇不同的格式化處理字元串。條件判斷的基本格式為[<!if(c1)then{f1}elif([c2])then{f2}else{f3}!>],該條格式字元串的含義是如果如果目前文本行滿足條件[c1]則使用[f1]格式化字元串,如果滿足條件[c2]則使用[f2]格式化字元串,否則使用[f3]格式化字元串。
條件字段,條件字段必須用[]括起來,其内容預設最後一個域為條件字元串,其前面一個域用數字表示,代表源資料文本的第幾個域,該字段如果為[0]則表示整行文本,其他數字則表示文本的第幾個域。這個字段可以為空,預設比對整行。條件字段最前面可以加上參數,參數可以是[ive]的組合,[i]表示忽略大小寫,[v]表示取反,[e]表示整個字段比對。
單條件字元串,單條件字元串預設含有該字元串,條件前面加上[!]表示不含有該字元串,條件用[<>]括起來表示該字元串不區分大小寫,或者組合使用[!<>]表示不區分大小寫不包含該字元串。
多條件字元串,即多個單條件字元串組合起來使用。每個單條件字元串外面都要使用[]括起來,多個單條件字元串之間使用[&&]表示并且,[||]表示或者。
單條件字元串跟多條件字元串一起使用,可以滿足非常複雜的條件判斷。下圖展示了條件字段基本文法規則:
條件字元串 含義說明 等價字元串
條件本身
[cond] 整行文本含有cond字元串 [0 cond]
[2 cond] 第2個域含有cond字元串
[-i cond] 整行文本不區分大小寫含有cond字元串 [-i 0 cond]
[-i 2 cond] 第2個域不區分大小寫含有cond字元串
[-v cond] 整行文本不含有cond字元串 [-v 0 cond]
[-v 2 cond] 第2個域不含有cond字元串
[-e cond] 整行文本等于cond字元串 [-e 0 cond]
[-e 2 cond] 第2個域等于cond字元串
[-iv 2 cond] 第2域不區分大小寫不含有cond字元串
[-ie 2 cond] 第2域不區分大小寫等于cond字元串
[-ve 2 cond] 第2域不等于cond字元串
[-ive 2 cond] 第2域不區分大小寫不等于cond字元串
單條件字元串
c1 該行文本含有字元串c1
!c1 該行文本不含有字元串c1
<c1> 該行文本不區分大小寫含有字元串c1
! <c1> 該行文本不區分大小寫不含有字元串c1
多條件字元串
[sc1]&&[sc2] 滿足條件sc1,并且sc2
[sc1]||[sc2] 滿足條件sc1,或者sc2
[sc1]&&[sc2]&&[sc3] 滿足條件sc1,并且sc2,并且sc3
[sc1]||[sc2]||[sc3] 滿足條件sc1,或者sc2,或者sc3
[sc1]&&[sc2]||[sc3] 滿足條件sc1,并且sc2,或者sc3
系統對輸出文本也提供了一些特殊文法支援,特殊文法隻作用于整行文本,不對具體的域做處理。
下表展示了對輸出文本的特殊文法說明。
輸出部分格式字元串 含義說明
\$line 該行文本不做任何處理,直接原樣輸出
{} 該行内容清空,直接換行處理
\$del 該行文本不輸出,直接處理下一行
7.6 AE域條件判斷用法示例
下面以資料庫表字段處理展示了AE格式化字元串的基本功能。通過讀取資料庫表字段,然後通過條件判斷直接生成整齊的資料庫表結構體。
#:struct1:sh:para-table_name,desc-生成資料庫表的結構體--精确生成
tippara="請輸入資料庫表名(eg:t_zero_sys_inf)"
para1=$(ae para 1 1)
table=$(echo $para1|head -1|tr "[A-Z]" "[a-z]")
lstable=s$(echo $table|cut -c2-100)
ustable=$(echo $lstable|tr "[a-z]" "[A-Z]")
echo "typedef struct $lstable {"
sqlstr="select trim(lower(a.column_name))||' '||(case when (a.data_type='LONG' or (a.data_type='NUMBER' and nvl(a.data_scale,0)=0)) then 'long' \
when (a.data_type='FLOAT' or a.data_type='NUMBER') then 'double' else 'char' end)||' '\
||(case when a.data_type='DATE' then 8 else nvl(a.data_length,88) end)||' '||\
replace(replace(trim(nvl(b.comments,' ')),' ',''),chr(10),'') from all_tab_columns a,all_col_comments b where 1=1 and a.owner=b.owner \
and a.table_name =upper('$table') and a.table_name =b.table_name and a.column_name=b.column_name order by a.column_id"
ae sql "$sqlstr" >$(ae s)
ae 1 "<!if(-ie 2 char)then{ \$2 \$1[\$3+1]; /* \$4 */}else{ \$2 \$1 ; /* \$4 */}!>"
echo "} $ustable;"
ae s trun
ae d trun
PL4:lidp>ae c struct1 sh
請輸入資料庫表名(eg:t_zero_sys_inf):t_zero_bal_ctrl
--------------------------------------------------------------------------------
typedef struct s_zero_bal_ctrl {
char fina_code [4 +1]; /* 财政代碼 */
char eff_type [1 +1]; /* 額度生效方式标志 */
char bal_id [100+1]; /* 額度ID */
char bdt_item_no [20 +1]; /* 對應預算名額編号 */
char bal_seqno [20 +1]; /* 額度編号 */
char econ_code [20 +1]; /* 經濟分類代碼 */
char fun_item_no [20 +1]; /* 功能分類科目代碼 */
double balance ; /* 額度餘額 */
double cur_bal ; /* 可用餘額 */
double use_bal ; /* 累計使用餘額 */
double tol_bal ; /* 累計發放額度 */
double bak_bal ; /* 備份餘額 */
char checkcode [50 +1]; /* 校驗碼 */
char other [255+1]; /* 預留字段 */
char reserve [60 +1]; /* 備用 */
char reserve1 [60 +1]; /* 預留字段1 */
char reserve2 [60 +1]; /* 預留字段2 */
} S_ZERO_BAL_CTRL;
第8章 AE檔案上傳和下載下傳
8.1 基本用法說明
使用者标簽可以通過AE放在一個公共的庫檔案中,供其他使用者下載下傳使用。使用者公共的庫檔案有[z]檔案和[z]鏡像檔案,由于隻有管理者才有處理[z]檔案标簽的權限,是以使用者上傳和下載下傳隻能放在[z]檔案的鏡像檔案。
8.2 使用者檔案上傳
使用者可以通過指令[ae load up],将[s]檔案中的标簽資料上傳到[z]鏡像檔案。如果[z]鏡像檔案中不存在要上傳的标簽,則[s]檔案内容會自動追加到[z]鏡像檔案。如果[z]鏡像檔案存在同名标簽,且該标簽的所有者屬于自己,則上傳标簽會覆寫[z]檔案的原有标簽内容。如果[z]鏡像檔案存在同名标簽,但該标簽的所有者不屬于自己,則上傳失敗。對于上傳失敗的情形,使用者可以更改标簽名之後重新上傳。
8.3 使用者檔案下載下傳
使用者可以通過指令[ae load cat]檢視[z]鏡像檔案中所有已上傳的标簽資訊,也可以通過[ae load cat hello]搜尋含有指定文本内容的資訊。如果找到自己想要的文本标簽則可以通過[ae load down]指令,根據提示輸入标簽名下載下傳該标簽。這樣标簽内容就會自動下載下傳儲存到[s]臨時檔案,最後可以通過[ae f s]指令儲存标簽内容到個人庫檔案中。
8.4 檔案對外釋出
如果管理者覺得某個标簽對大多數人都非常有用,則可以将該标簽從[z]鏡像檔案下載下傳到個人[s]臨時檔案,然後通過[ae z s]将該标簽儲存到[z]檔案中。由于普通使用者都有檢視和使用[z]檔案标簽的權限,管理者将文本标簽儲存到[z]檔案即相當于将該标簽文本對外釋出。标簽一旦釋出出來,普通使用者就可以像使用普通标簽一樣使用該标簽文本。
8.5 常用指令彙總
條件字元串 含義說明 等價指令
ae load 檢視檔案上傳下載下傳功能用法 ae help load
ae load up 上傳檔案标簽到[z]鏡像檔案
ae load cat 檢視[z]鏡像檔案中所有已上傳的标簽資訊
ae load cat hello 檢視[z]鏡像檔案中含有hello的标簽資訊
ae load down 下載下傳[z]鏡像檔案标簽腳本到[s]臨時檔案
ae z s 管理者将下載下傳的标簽文本對所有使用者釋出
Ae b s 将下載下傳的标簽文本儲存在個人[b]庫檔案中
Ae f s 将下載下傳的标簽文本儲存在個人[f]庫檔案中
第9章 AE資料庫通路
9.1 AE資料庫通路
通過AE通路資料庫跟普通腳本通路資料庫沒有任何差別,隻是對輸出資料的處理上存在差異。AE通路資料庫的目的是獲得資料源,以便将資料用于其他用途。
通過[ae sql sqlstring]指令可以運作任意資料庫語句,運作結果會直接輸出在螢幕。
通過[ae tb tablename]可以查詢任意資料庫表字段的基本資訊,包括字段名,字段類型,字段長度及字段說明。由于查詢資料庫表字段是我們最常用的操作,是以工具對這個操作安排了專門的操作指令。
通過[ae cal calstring]指令可以計算任何數學表達式的值,其原理就是調用資料庫的查詢計算語句,然後将計算結果輸出在螢幕。
其他複雜的資料庫處理,隻能由使用者自己通過标簽腳本調用這幾個接口來實作。
9.2 常用指令彙總
ae sql t_table_name 檢視表結構
ae sql sql_str 運作資料庫語句
第10章 AE項目開發示範
10.1 整體說明
基于AE的項目開發,即讓[ae]工具參與到項目開發的各個環節。通過AE的文本和腳本管理方法,提高項目的開發效率。
10.2 需求開發計劃
10.2.1 傳統需求開發計劃**
需求開發計劃即需求開發的總體規劃,一般包括需求檔案内容,需求涉及到的接口檔案内容,需求開發測試的過程筆記,以及最終送出的源碼清單。傳統的做法是建立一個私人目錄,将業務相關的文檔存放在裡面。開發過程中涉及到的"源碼清單",運作的"sql語句"以及其他資料都用文檔儲存,也放在這個目錄中。
這種做法很常見,但缺點也很明顯。
1. 管理麻煩
對每個需求建立一個私人目錄,如果需求很多,就會出現一大堆私人目錄,管理起來就比較混亂。時間久了,對每個目錄放了什麼檔案,開發者自己都不清楚了。
2. 查詢使用麻煩
對于一些已經上線的需求,如果要查詢某個具體的業務點,就必須打開私人目錄一個一個檔案查找。如果時間比較緊或者查詢的問題比較急迫,查找起來就會手忙腳亂。
3. 更新疊代麻煩
如果由于項目變動或者其他原因,自己開發的需求必須交給别的項目成員。如果接收人收到的是一大堆項目檔案組成的壓縮包,這個時候熟悉項目就會變成一件非常困難的事情,甚至根本找不到人接手。這樣項目經過幾次轉手之後,最後總會造成大量的檔案丢失,或者讓項目文檔變得難以了解。通常接收人與其去翻閱一大堆檔案,不如自己去一行一行審閱代碼。
10.2.2 基于AE的需求開發計劃
通過AE的檔案管理功能,上面的問題就比較容易解決。對AE使用者來說,一個需求計劃就是一個需求标簽。使用者隻需要建立一個簡單的需求标簽,然後在标簽描述中注明需求編号名稱等基本資訊,最後就可以通過這個标簽文本來管理整個需求了。
需求計劃标簽一般存放在使用者[f]庫檔案,根據需求開發的不同子產品将整個需求計劃标簽設定幾個子标簽。通常的做法是将需求計劃劃分為"源碼清單",“開發測試”,“需求文檔”,"接口文檔"幾個部分。然後在這幾個子產品中,根據需求開發不同階段要求,分别對需求開發資料進行管理。
1.源碼清單,
源碼清單用來存放需求開發過程中修改的檔案、配置參數等資訊,這個部分是最終上線的依據,也是上線清單的主要來源。每修改一個檔案就在源碼清單中将檔案列出來,這樣可以有效防止檔案遺漏。最後檔案入庫之後,還可以将源碼清單作為入庫檢查腳本的資料源,通過一條單獨的指令就可以檢查所有入庫檔案是否入庫成功了。
2.開發測試過程筆記
開發測試過程筆記是對整個需求各個功能點開發過程的記錄,養成記錄過程筆記的習慣能夠讓整個開發過程條例清晰。過程筆記記錄的目的是防止有功能點被遺漏,另外也為了以後問題查詢提供友善。測試筆記可以記錄測試參數等資訊,如果上線功能有瑕疵,也可以通過測試筆記迅速還原測試場景,發現問題也會成為非常簡單的事情。
3.需求文檔
客戶一般會提供excel或者word需求文檔,把文檔内容直接複制過來就可以了。開發之前可以在這部分對将要實作的各個功能點做好細分,對一些重要的功能點做好标記,然後就可以對各個功能點單獨開發了。
4. 接口文檔
這個部分一般存放需求涉及到的接口文檔,資料庫表,業務原始參數資料等。這部分内容如果涉及到的接口文檔比較大,則可以通過設定2級子标簽來将文檔劃分為幾個大的子產品。另外還可以借助AE文本對齊功能,将一些重要的資訊,如交易碼、封包接口、資料庫表、業務參數等資訊進行文本對齊,友善後續查找和使用。
10.2.3 AE需求開發計劃樣例單
下面是一份普通的需求計劃單,計劃單隻摘取了重要部分用于展示。标簽名用的"地區碼"加上"需求順序号"組成。标簽類型"require"即"需求",标簽描述用的需求在windows系統的全路徑目錄名,其中包含了需求編号和需求名稱等資訊。這樣設定标簽的好處是以後可以通過[ae f cat require]檢視所有需求,或者通過[ae f cat 0072]檢視該地區的所有需求。
#:0072_5:requre:G:\2018req\20180151-黃埔區授權支付項目需求(2018年3月2日)
--------------------------------------------------------------------------------
--:1:源碼清單
--------------------------------------------------------------------------------
1.前置
......
2.前端
......
3.背景
......
--------------------------------------------------------------------------------
--:2:開發測試
--------------------------------------------------------------------------------
1.代扣費
......
2.定期借記及集中代付
......
3.0510
......
<此處省略100行>
......
--------------------------------------------------------------------------------
--:3:<<需求資訊--黃埔區授權支付項目需求(2018年3月2日)>>
--------------------------------------------------------------------------------
需求詳細資訊
......
<此處省略50行>
......
--------------------------------------------------------------------------------
--:4:需求42/<<附件:黃埔支行授權支付項目需求>>
--------------------------------------------------------------------------------
需求詳情:
......
<此處省略400行>
......
--------------------------------------------------------------------------------
10.3 需求開發
10.3.1 整體說明
需求開發即需求單上各個功能點的實作過程,基于AE的需求開發過程跟傳統開發過程沒有什麼不同,隻是在具體開發細節上給出了一套自己的解決方案。下面給出具體開發中遇到的問題,以及基于AE的解決方案。
10.3.2 基于AE的檔案查找
在開發過程中經常涉及到檔案或者函數等文本資訊查找,如果對系統不是非常熟悉就需要對資訊做全局查找,這樣查找的速度是非常慢的。全局查找搜尋的範圍比較大,其中查找的絕大多數目錄都是我們用不到的,我們可以通過AE腳本對這個問題進行優化。
1.設定查找範圍
我們把自己用到的目錄配置在一個标簽裡面,然後通過AE腳本在這個标簽配置的目錄中查找。整個查找功能腳本實作起來不過幾行指令,但查找速度基本都是秒級的。
PL3:/lidp >ae b cat searchdir
#:searchdir:常用的代碼目錄
2.指定查找類型
另外通過一個查找腳本可以衍生出多個查找腳本,可以實作按照檔案類型查找,比如查找[.pc]檔案,查找[.h]檔案等。通過建立多個指令就可以盡量避免找到不必要的資訊,查找的目的性就更強一些。
指定檔案類型查找文本内容:
PL3:/lidp/etc>ae b cat search1
#:search1:sh:para-fieldtype,desc-查找.pc檔案中的關鍵字
PL3:/lidp/etc>ae b cat search2
#:search2:sh:para-fieldtype,desc-查找.h檔案中的關鍵字
3.建立全局連接配接
最後對于一些特别常用的指令,可以直接在系統bin目錄或者shbin目錄建立全局連結,這樣就不用輸入ae直接輸入單指令就可以查找檔案了。
單指令查找:
lss -> /lidp/priv/zsp/autoeasy/lss.sh
vis -> /lidp/priv/zsp/autoeasy/vis.sh
4.個性化調整
在lss.sh和vis.sh中直接調用[ae]的查找指令[ae b searchfile sh filename],這樣就可以直接通過[lss]和[vis]檢視或者打開具體的檔案名。這個查詢和打開檔案是全局的,使用起來非常友善。通過給這兩個指令帶上第2個參數,可以指定查找打開開發庫、測試庫還是受控庫檔案。
例如:
查找檔案所在位置:
PL3:/lidp/etc>lss ASDM060.pc
/lidp/src/SDM/ASDM060.pc
PL3:/lidp/etc>lss ASDM060.pc 1
/lidpcs/src/SDM/ASDM060.pc
PL3:/lidp/etc>lss ASDM060.pc 2
/lidptst2/src/SDM/ASDM060.pc
用view編輯器打開檔案:
PL3:/lidp/etc>vis ASDM060.pc
PL3:/lidp/etc>vis ASDM060.pc 1
PL3:/lidp/etc>vis ASDM060.pc 2
通過以上幾個簡單的設定,我們就可以在系統的任何位置都可以随時在1秒鐘内檢視打開任何檔案,效率得到很大提升。
10.3.3 基于AE的代碼編輯
1. 單函數編輯
在一個大的檔案中進行函數編輯有很多缺陷,比如會限制其他人同時編輯該檔案,不能進行整體的字元串替換删除,還有就是無法同時編輯兩個以上關聯函數。
使用AE進行代碼編輯就很容易解決以上問題,我們可以通過指令[ae b getfun sh funname,filename]直接将函數取出放到[s]臨時檔案,然後通過[ae s vi]指令編輯該函數,修改完畢再通過[ae b setfun sh funname,filename]将函數儲存到檔案。整個操作過程相當于給每個函數單獨配置設定了記憶體空間,讓我們可以在一個獨立的環境進行函數編輯。
由于使用者是在自己獨立的檔案中編輯該函數,是以對其他使用者沒有任何影響。同時使用者可以在臨時檔案中随便對函數進行替換操作,不用擔心對源檔案中的其他函數産生影響。如果要同時編輯多個函數,隻需要使用多個[getfun]指令,然後通過[ae s vi]打開多個視窗即可。多函數編輯相當于其他進階語言的IDE工具,避免在同一個檔案中進行多函數跳轉。
單函數編輯最長用的情況是,拷貝現有函數經過特殊處理改造成一個新函數。這樣在[setfun]的時候就隻是将目前函數追加到源檔案末尾,不用擔心對源函數産生任何影響。即可是覆寫目前檔案函數,也可以在[setfun]标簽腳本中進行非常嚴格的檢查,不會出現任何差錯。
2. 代碼輔助資訊實時擷取
在編輯代碼的時候經常需要查詢文檔以擷取各種輔助資訊,包括通訊接口字段資訊,資料庫表結構資訊,參數配置資訊等。有時還需要對其中某些字段的用法做備注,友善以後查找使用。所有這些操作都會浪費大量的時間,通過AE來做這些事情就簡單多了。
通訊接口一般直接在開發計劃标簽中通過子标簽指令[ae f require pg 3]直接擷取。
資料庫表字段資訊可以以資料庫表名為标簽直接存放在[f]庫檔案,使用的時候直接通過指令[ae f tablename]就可以實時擷取到資料庫表結構資訊了。
其他參數配置資訊一般都存放在系統資料庫表中,對每個參數表單獨寫一個腳本存放在[b]檔案,腳本标簽名稱使用資料庫表名,這樣任何時候需要查詢配置參數,隻需要通過一條指令[ae b tablename sh]就可以了。
3. 代碼自動生成
通過AE的代碼對齊功能可以自動生成一些簡單代碼,如果要實作一些稍微複雜的邏輯就必須寫自己的實作腳本了。借助AE強大的字元串處理功能,實作一些常用且重複量大的工作是非常簡單的。
對于寫一些常用的變量定義、初始化、去空格、日志列印,檔案的打開、周遊、關閉,資料庫表的增、删、改、查等等操作,都可以通過一些簡單的腳本或者函數來實作。通過這些自動代碼腳本的組合使用,一個複雜功能80%以上的代碼量都可以自動生成了。然後稍微進行一些小的改動,就可以直接用來測試了。
自動代碼生成除了能減少我們的工作量以外,還具備如下優勢:
首先是代碼比較整體,通過腳本生成代碼我們可以加上代碼對齊功能,生成的代碼一般都是非常整齊的。
其次不會出bug,手寫代碼經常會有些地方考慮不周,用腳本來寫就沒有這個問題。即使偶爾出現一個小的bug,隻需要修改下腳本,以後自動生成的代碼就不會再出現同樣的問題了。
最後是代碼維護友善,自動生成代碼是整齊的,查找問題很友善。另外自動代碼生成都遵循一定的規則,不會像手寫代碼那麼随意。所有代碼采用統一的模式,後人維護起來就不用投入那麼多精力去考慮代碼間的差異問題了。
10.3.4 基于AE的代碼測試
AE工具使用起來非常靈活和友善,通過AE進行代碼測試将是一件非常輕松的事情。通過AE工具可以簡單的實作如下功能:
1. 單行代碼測試或者單個函數測試
在"1.5.9 AE标簽腳本基本用法示例"中,我們列舉了通過幾個标簽和腳本運作c代碼的示例。當我們搭建好這個架構之後,以後想測試任何c代碼都可以直接通過[ae c hello1]調出函數文本,通過[ae s vi]将要測試的代碼指派到标簽中,然後[ae c s]将标簽儲存,最後通過[ae c hello sh]編譯運作c代碼。無論在系統的任何地方,隻需要幾秒鐘就可以測試一行代碼的執行情況。
這種測試也适用于普通函數,其測試方法跟上面完全一樣。如果測試的是項目函數,則可以參照[hello]在我們的[b]檔案中拷貝一套相同的架構,然後在makefile中連結上系統庫,這樣就可以用這種方式測試任何[pc]檔案或者函數了。
我們測試的項目越複雜,AE的功能就越能顯現出來。并且AE的測試記錄是可以儲存的,每次測試完隻需要把測試部分代碼拷貝進一個普通函數,然後注明測試的内容,這樣在下次測試的時候隻需要調用這個函數即可。
2. 測試封包統一管理
我們經常面對需要發送測試封包的情況,如果采用傳統測試方法,我們測試一個較大項目就要建立上百個封包測試檔案,每次測試都要從一大堆檔案中尋找需要的封包,然後修改測試資料,這個過程是非常痛苦的。
采用AE儲存封包就友善多了,我們隻需要建立一個普通的封包标簽即可。每次查找隻需要通過[ae f cat msg]就可以全局搜尋自己想要的封包,對同一個類交易的不同封包我們可以通過命名多個标簽名來将其全部儲存,通過在标簽行寫一些備注資訊,任何時候都可以直接拿出來使用。
3. 封包發送
對大多數項目來說,發送封包的程式大同小異,隻是IP和端口略有不同。采用傳統方式發送封包,需要記憶一大堆IP端口等資料,即使寫在一個函數中也要命名一大堆分支,管理起來非常麻煩。
通過AE發送封包就沒有這些煩惱了,我們可以對每個項目的封包發送定一個标簽腳本,在腳本中配置IP端口,通過腳本接收發送另外一個标簽封包,這樣就可以輕松的将封包發送出去了。
當接手一個新的項目的時候,我們隻需要将之前寫好的腳本拿出來,簡單的修改下标簽名以及IP和端口等參數将其儲存在[b]檔案中,這樣就可以作為新的項目封包發送腳本了。隻需要花費幾秒鐘的時間就可以疊代出一個新的腳本,并且跟原來發送腳本互相獨立,互不影響。
10.4 代碼入庫
10.4.1 devdiff的不足
開發測試環境提供了devdiff代碼入庫工具,這個工具隻能将一個檔案全量入庫,使用起來非常不友善。一個好的入庫工具應該具備以下特點:
1. 擷取檔案快照
即在入庫的那個時刻,直接擷取将要入庫檔案的快照資訊,而不用擔心自己在入庫的同時還有其他使用者在編輯該檔案。這就要求工具在入庫的時候将該檔案拷貝一份出來,然後通過拷貝檔案來入庫
2. 對每個修改點單獨入庫
即在入庫的時候可以對每個不同點進行單獨挑選決定是否入庫,這樣就可以把自己的修改跟别人的修改分開,把自己不同需求的修改分開,以及把自己的測試代碼跟要上線代碼分開。
3. 入庫中間檔案修改
對一個具體的修改點如果不想全量入庫,可以先把這個修改點入庫到中間檔案,然後手動修改中間檔案,最後儲存退出繼續入庫下個修改點。如果能夠達到這種效果,那麼我們基本實作了行級的代碼入庫,這樣就可以快速入庫任何複雜的修改了。
4.檔案反向入庫
即需要把版本庫中的修改反過來回退到開發庫,由于開發庫已經做了别的需求變動,無法直接将版本庫中的代碼拷貝回來。這樣就必須以版本庫為基礎對開發庫進行反向入庫處理,最後将入庫檔案覆寫到開發庫。如果能做到這點就不用擔心由于先改了生産版本,而不友善同步開發版本的情況。
10.4.2 基于AE的devdiff入庫工具
由于工具本身對腳本的運作和維護提供了強大的支援,讓AE的devdiff具備上述功能就非常簡單。基于AE的devdiff入庫腳本,具體每個功能點的實作邏輯如下:
1. 擷取檔案快照
運作[devdiff]标簽腳本的時候将要入庫的檔案拷貝到[ae home]下的[devdiff]目錄即可,然後通過拷貝檔案跟版本庫檔案對比來進行入庫處理。
2. 對每個變動點單獨入庫
我們可以通過diff指令将所有不同點儲存在工具的 [a]臨時檔案,通過腳本一條一條讀取[a]中的變動點,分析該變動點是"新增"“修改"還是"删除”,針對每種情況做單獨分析處理,如果使用者确定實施該變動則讀取拷貝檔案相應部分追加到[d]臨時檔案,如果不實施則讀取測試庫檔案的拷貝檔案追加到[d]臨時檔案。這樣就可以針對每個變動點單獨入庫,相比手工處理節省大量時間。
4. 入庫中間檔案修改
由于入庫的中間檔案都儲存在[d]臨時檔案,如果針對某個變動點需要做局部改動,則可以通過[ae d vi]指令打開中間檔案,然後跳轉到檔案最後進行修改處理,處理完儲存檔案即可。然後繼續處理下個變動點,讓下一部分資訊繼續追加到[d]檔案,直到整個檔案的中間鏡像檔案建立完畢。
5. 檔案反入庫
檔案反入庫跟正向入庫的不同點就是在挑選檔案的時候,如果版本庫檔案的變動選擇"否",如果是開發庫的變動選擇"是",最後将結果檔案[d]拷貝覆寫開發庫檔案即可。
10.4.3 基于AE的devdiff使用指引
通過[ae b devdiff sh]指令即可運作改進後的[devdiff]工具,然後在需要入庫的檔案所在目錄輸入檔案名[ASDM131.pc],然後工具讀取該檔案進入該檔案入庫的主界面。工具提供的功能點較多,目的是為了應對各種複雜情況的入庫處理。其中最常用的是3、4、5、6這幾個指令。
3-挑選對比建立鏡像檔案。鏡像檔案即[d]檔案,輸入這條指令就可以一條一一條讀取[a]檔案的不同點,根據使用者輸入确認資訊就可以進行單個不同點分别入庫了。
4-鏡像檔案入庫。即生成[d]檔案的開發庫備份腳本以及測試庫的入庫腳本,通過簡單的[cp]拷貝指令即可實作完美入庫。
5-對比測試與鏡像檔案。通過這個指令可以檢視3處理後測試版本跟鏡像檔案的不同。
6-對比鏡像與開發。通過這個指令可以檢視3處理後鏡像檔案跟開發檔案的不同。
PL3:/lidp>ae b devdiff sh
請輸入目前目錄的檔案名(eg:ASDM120.pc):ASDM131.pc
--------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#------------------------------:【主界面】:-------------------------------------
#--:1.對比測試與開發,2-挑選對比輸出到s檔案,3-挑選對比建立鏡像檔案d,4-鏡像檔案入庫
#--:5-對比測試與鏡像,6-對比鏡像與開發,7-檢視指令集,8-手動修改指令集
#--:9-根據指令集進行2操作,0-根據指令集進行3操作
#--:s-檢視s檔案,a-檢視a檔案,d-檢視d檔案,c-檢視測試庫檔案,k-開發庫檔案,h-檢視幫助,q-退出工具
#-------------------------------------------------------------------------------
10.4.4 基于AE的devdiff工具上傳下載下傳與分享
一個好的工具隻有分享給更多使用者使用,才能提高整個團隊的工作效率。基于AE的devdiff工具的上傳下載下傳與分享,跟普通标簽的這個功能并沒有任何差別。這裡隻是結合具體的工作場景來講解其用法,以便能把問題講的更清楚一些。
1. 工具上傳
當開發完[devdiff]工具并通過測試驗證,這個時候可以将該工具上傳到[z]鏡像庫檔案,供其他使用者下載下傳使用。使用者先通過[ae b devdiff]将工具腳本拿到自己的[s]臨時檔案,然後通過[ae load up]指令将該标簽上傳到[z]鏡像檔案。
2.工具下載下傳
其他使用者可以通過[ae load cat]指令檢視到該工具的概要資訊,然後通過[ae load down]指令按照提示輸入工具名稱,[devdiff]就可以将工具腳本下載下傳到自己的[s]臨時檔案。最後通過[ae b s]指令将工具腳本存放到自己的庫檔案,這樣就可以通過[ae b devdiff sh]使用該工具了。
由于每個使用者的使用者檔案都是獨立的,新的使用者在使用的devdiff工具跟其他使用者使用的不是同一個,隻是運作的代碼相同罷了。新的使用者在下載下傳到個人檔案之後,可以對該腳本進行任何形式的改造,以便讓其以更加适合自己的方式來運作。
3. 工具分享
如果大多數使用者都覺得該工具很好用,這時就可以通知管理者将工具分享給所有人。管理者先通過[ae load down]指令将工具腳本下載下傳到自己的[s]臨時檔案,然後通過[ae z s]将工具腳本上傳到[z]庫檔案。這樣所有使用者都可以通過[ae z cat]指令檢視到該工具,并且可以使用[ae z devdiff sh]運作該腳本程式進行入庫處理。
10.5 上線版本檢查
10.5.1 整體說明
由于上線時間相對比較緊迫,用肉眼去檢查代碼是一件非常痛苦的事情。特别是如果上線的内容比較多,人工檢查就非常容易遺漏。我們檢查檔案不外乎檢查檔案是否已經入庫,測試庫跟受控庫檔案是否相同,如果是庫檔案是否已經編譯出動态或者靜态庫,如果是可執行程式是否已經編譯出了可執行程式,以及配置檔案跟資料庫參數等是否齊全。由于檢查的每一項都很明确,是以就可以通過标簽腳本來實作這些檢查功能。
10.5.2 AE自動化版本檢查
我們每個人負責的項目範圍都比較狹窄,項目代碼基本都隻存在幾個具體的目錄中,每個目錄目錄的作用也非常明确,這樣我們就可以根據目錄來将上線檔案分類,通過腳本函數對每個目錄中的上線檔案進行單獨檢查,并把檢查的結果輸出在螢幕。如果檢查中懷疑檔案可能有問題,那就列印出警告資訊,否則就列印出檢查通過資訊。
我們的工作就是把所有上線檔案複制到[s]臨時檔案,然後修改下格式讓其能夠被我們的檢測腳本識别。如果我們在做需求計劃的源碼清單的時候,本來就是按照版本檢查的資料格式填寫的,那麼就可以直接運作腳本程式,分分鐘完成所有代碼的檢查工作。
下面展示了一個普通的代碼檢測過程及效果:
PL3:/lidp/priv/zsp/H002>ae s cat
fmt:
zero_hp_notice_tail.fmt
zero_pay_list_0072.fmt
SDM:
ASDM119.pc
ASDM128.pc
PL3:/lidp/priv/zsp/H002>ae b check sh
請輸入上線日期(def:20180523):20180530
--------------------------------------------------------------------------------
------------------------【所有檔案比較,相同為1,不同為0】------------------------
[fmt:]:
[zero_hp_notice_tail.fmt]:
-rw-r--r-- 1 lidp oinstall 308 May 29 14:49 /lidp/fmt/zero_hp_notice_tail.fmt
-rw-r--r-- 1 lidpcs oinstall 308 May 29 17:54 /lidpcs/fmt/zero_hp_notice_tail.fmt
-rw-r--r-- 1 lidptst2 oinstall 308 May 29 17:55 /lidptst2/fmt/zero_hp_notice_tail.fmt
-rw-r--r-- 1 lidptst2 oinstall 308 May 29 17:55/lidptst2/update/20180530/upd/fmt/zero_hp_notice_tail.fmt
zero_hp_notice_tail.fmt]:上線與受控:1,受控與測試:1,測試與開發:1
[zero_pay_list_0072.fmt]:
-rwxr-xr-x 1 lidp oinstall 2629 May 14 14:56 /lidp/fmt/zero_pay_list_0072.fmt
-rwxr-xr-x 1 lidpcs oinstall 2629 May 25 09:29 /lidpcs/fmt/zero_pay_list_0072.fmt
-rwxr-xr-x 1 lidptst2 oinstall 2629 May 29 17:55 /lidptst2/fmt/zero_pay_list_0072.fmt
-rwxr-xr-x 1 lidptst2 oinstall 2629 May 29 17:56/lidptst2/update/20180530/upd/fmt/zero_pay_list_0072.fmt
zero_pay_list_0072.fmt]:上線與受控:1,受控與測試:1,測試與開發:1
[SDM:]:
-rwxr-xr-x 1 lidp oinstall 11433805 May 31 10:19 /lidp/lib/libappSDM.so
-rwxr-xr-x 1 lidpcs oinstall 10845014 May 30 08:46 /lidpcs/lib/libappSDM.so
-rwxr-xr-x 1 lidptst2 oinstall 10516792 May 30 10:01 /lidptst2/lib/libappSDM.so
-rwxr-xr-x 1 lidptst2 oinstall 10516792 May 30 11:32/lidptst2/update/20180530/upd/lib/libappSDM.so
[libappSDM.so]:上線與受控:1,受控與測試:0,測試與開發:0
[ASDM119.pc]:
-rwxr-xr-x 1 lidp oinstall 92113 May 29 14:52 /lidp/src/SDM/ASDM119.pc
-rwxr-xr-x 1 lidpcs oinstall 91942 May 29 17:56 /lidpcs/src/SDM/ASDM119.pc
-rwxr-xr-x 1 lidptst2 oinstall 91942 May 29 17:57 /lidptst2/src/SDM/ASDM119.pc
[ASDM119.pc]:受控與測試:1,測試與開發:0
[ASDM128.pc]:
-rwxr-xr-x 1 lidp oinstall 186646 May 29 15:07 /lidp/src/SDM/ASDM128.pc
-rwxr-xr-x 1 lidpcs oinstall 186592 May 29 17:57 /lidpcs/src/SDM/ASDM128.pc
-rwxr-xr-x 1 lidptst2 oinstall 186592 May 29 17:57 /lidptst2/src/SDM/ASDM128.pc
[ASDM128.pc]:受控與測試:1,測試與開發:0
10.6 AE項目生态圈
10.6.1 總體說明
AE項目生态即一群使用AE進行項目開發的人,不斷改進開發腳本提高整個團隊開發效率的過程。我們每個人在使用AE進行項目開發的時候,都會不自覺的寫出一大堆腳本來。這些腳本中絕大多數都可以跟其他人共享,如果我們每個人都專注于自己熟悉子產品的開發,然後分享給大家一起使用,通過使用者問題回報對腳本不斷更新完善,最終将形成一套完美的開發工具。這樣項目組成員都使用這套工具進行項目開發,那麼節省的開發時間将非常可觀。
10.6.2 腳本更新
用AE開發出的腳本程式是可以不斷更新的,我們不僅可以拷貝現有腳本改造成一個新的腳本,還可以通過腳本生成另外一個腳本。當一個腳本經過幾次疊代之後,腳本的功能将會變得非常強大,運作效率也會得到很大提高。這些通過一個人的力量是很難實作的,也缺乏更新的動力。如果在一個生态圈中,大家一起對腳本進行優化改進,不僅成本低,而且效果也會非常好。
10.6.3 AE無處不在
當我們已經習慣于用腳本開發程式,那麼我們做每件事情的時候會優先考慮,是否可以通過腳本來實作。當我們工作的每個環節都可以用腳本來完成的時候,我們就徹底擺脫了單調的工作,讓我們的時間用在更有利于個人價值提高的事情上來。
第11章 AE應用開發
11.1 AE自動化程式設計
11.1.1 總體說明
把一些常用代碼編寫做成一個單獨的模版,把代碼涉及到的變量資訊作為資料源,然後通過腳本自動生成項目代碼。
11.1.2 變量定義初始化及日志列印
在s檔案配置變量名稱,類型,大小,描述資訊,讓腳本讀取該資訊生成相關代碼。
11.1.3 檔案打開周遊關閉
在s檔案配置檔案變量名稱,打開方式,操作類型,讓腳本讀取該資訊生成相關代碼。
11.1.4 資料庫表增删改查及遊标使用
在s檔案配置資料庫表名稱,使用方式,關聯資訊,讓腳本讀取該資訊生成相關代碼。
11.2 AE繪圖
11.2.1 總體說明
目前AE隻能運作在unix系統,AE的繪圖也隻能繪制一些簡單的文本類型圖案。
11.2.2 棋盤報表繪制
手工通過UE繪制報表比較麻煩,通過AE繪制報表速度會快很多。隻要我們能通過AE能夠識别的指令繪制報表,AE就能按照我們的指令繪制出最理想的圖案。
11.2.3 棋盤報表繪制過程示範
1.初始化報表行數和列數
PL4:/lidp/src/SDM>ae b qipan sh
請輸入行(def:4):5
請輸入列(def:8):10
--------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 0 1
1┌┬┬┬┬┬┬┬┬┬┐
2├┼┼┼┼┼┼┼┼┼┤
3├┼┼┼┼┼┼┼┼┼┤
4├┼┼┼┼┼┼┼┼┼┤
5├┼┼┼┼┼┼┼┼┼┤
6└┴┴┴┴┴┴┴┴┴┘
#-------------------------------------------------------------------------------
2.設定報表的行寬和列寬
#------------------------------:【主界面】:-------------------------------------
#--:1-調整行數列數及行寬列寬,2-繪制圖形樣式,3-設定圖像文本,4-列印圖像資訊
#--:s-設定列印,p-列印圖像,q-退出程式
#-------------------------------------------------------------------------------
請輸入指令:1
--------------------------------------------------------------------------------
┌┬┬┬┬┬┬┬┬┬┐
├┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┤
├┼┼┼┼┼┼┼┼┼┤
└┴┴┴┴┴┴┴┴┴┘
#-------------------------------------------------------------------------------
#--:1-調整行寬,2-調整列寬,3-調整行數,4-調整列數,5-初始化圖形
#--:s-設定列印方式,p-列印圖形,q-退出,exit-退出程式
#-------------------------------------------------------------------------------
請選擇操作類型:1
--------------------------------------------------------------------------------
------------------:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
目前行寬參數 :0 0 0 0 0
請輸入新的行寬參數:1 2 1
--------------------------------------------------------------------------------
┌┬┬┬┬┬┬┬┬┬┐
│││││││││││
├┼┼┼┼┼┼┼┼┼┤
│││││││││││
│││││││││││
├┼┼┼┼┼┼┼┼┼┤
│││││││││││
├┼┼┼┼┼┼┼┼┼┤
│││││││││││
├┼┼┼┼┼┼┼┼┼┤
│││││││││││
└┴┴┴┴┴┴┴┴┴┘
#-------------------------------------------------------------------------------
#--:1-調整行寬,2-調整列寬,3-調整行數,4-調整列數,5-初始化圖形
#--:s-設定列印方式,p-列印圖形,q-退出,exit-退出程式
#-------------------------------------------------------------------------------
請選擇操作類型:2
--------------------------------------------------------------------------------
------------------:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
目前列寬參數 :0 0 0 0 0 0 0 0 0 0
請輸入新的列寬參數:1 2 1
--------------------------------------------------------------------------------
┌─┬──┬─┬─┬─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │ │ │ │ │
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ │ │
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ │ │
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ │ │
└─┴──┴─┴─┴─┴─┴─┴─┴─┴─┘
#-------------------------------------------------------------------------------
#--:1-調整行寬,2-調整列寬,3-調整行數,4-調整列數,5-初始化圖形
#--:s-設定列印方式,p-列印圖形,q-退出,exit-退出程式
#-------------------------------------------------------------------------------
請選擇操作類型:q
#-------------------------------------------------------------------------------
3.合并單元格
#------------------------------:【主界面】:-------------------------------------
#--:1-調整行數列數及行寬列寬,2-繪制圖形樣式,3-設定圖像文本,4-列印圖像資訊
#--:s-設定列印,p-列印圖像,q-退出程式
#-------------------------------------------------------------------------------
請輸入指令:2
--------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 0 1
1┌┬┬┬┬┬┬┬┬┬┐
2├┼┼┼┼┼┼┼┼┼┤
3├┼┼┼┼┼┼┼┼┼┤
4├┼┼┼┼┼┼┼┼┼┤
5├┼┼┼┼┼┼┼┼┼┤
6└┴┴┴┴┴┴┴┴┴┘
#-------------------------------------------------------------------------------
#--:3p-調整邊線,4p-合并單元格,h-檢視幫助資訊,s-設定列印,p-列印圖像,q-退出,exit-退出程式
#--: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14
#--:┌,┬,┐,├,┼,┤,└,┴,┘,─,│,@@
#-------------------------------------------------------------------------------
請輸入指令:1 1 1 2,1 3 1 5,1 6 1 10
1 2 3 4 5 6 7 8 9 0 1
1┌─┬──┬────┐
2├┬┼┬┬┼┬┬┬┬┤
3├┼┼┼┼┼┼┼┼┼┤
4├┼┼┼┼┼┼┼┼┼┤
5├┼┼┼┼┼┼┼┼┼┤
6└┴┴┴┴┴┴┴┴┴┘
#-------------------------------------------------------------------------------
#--:3p-調整邊線,4p-合并單元格,h-檢視幫助資訊,s-設定列印,p-列印圖像,q-退出,exit-退出程式
#--: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14
#--:┌,┬,┐,├,┼,┤,└,┴,┘,─,│,@@
#-------------------------------------------------------------------------------
請輸入指令:5 1 5 10
1 2 3 4 5 6 7 8 9 0 1
1┌─┬──┬────┐
2├┬┼┬┬┼┬┬┬┬┤
3├┼┼┼┼┼┼┼┼┼┤
4├┼┼┼┼┼┼┼┼┼┤
5├┴┴┴┴┴┴┴┴┴┤
6└─────────┘
#-------------------------------------------------------------------------------
#--:3p-調整邊線,4p-合并單元格,h-檢視幫助資訊,s-設定列印,p-列印圖像,q-退出,exit-退出程式
#--: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14
#--:┌,┬,┐,├,┼,┤,└,┴,┘,─,│,@@
#-------------------------------------------------------------------------------
請輸入指令:p
--------------------------------------------------------------------------------
┌────┬─────┬─────────┐
│ │ │ │
├─┬──┼─┬─┬─┼─┬─┬─┬─┬─┤
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ │ │
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │ │ │
├─┴──┴─┴─┴─┴─┴─┴─┴─┴─┤
│ │
└────────────────────┘
#-------------------------------------------------------------------------------
4.設定顯示樣式
#--:3p-調整邊線,4p-合并單元格,h-檢視幫助資訊,s-設定列印,p-列印圖像,q-退出,exit-退出程式
#--: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14
#--:┌,┬,┐,├,┼,┤,└,┴,┘,─,│,@@
#-------------------------------------------------------------------------------
請輸入指令:q
#-------------------------------------------------------------------------------
#------------------------------:【主界面】:-------------------------------------
#--:1-調整行數列數及行寬列寬,2-繪制圖形樣式,3-設定圖像文本,4-列印圖像資訊
#--:s-設定列印,p-列印圖像,q-退出程式
#-------------------------------------------------------------------------------
請輸入指令:4
#-------------------------------------------------------------------------------
#--:1-設定顯示方式,2-列印圖像,3-列印圖像到臨時檔案,4-列印圖像參數
#--:5-列印圖形參數到s檔案,6-讀取s圖像參數資訊到工具,7-列印圖像及參數到s檔案
#--:q-退出,exit-退出程式
#-------------------------------------------------------------------------------
請選擇操作類型:1
--------------------------------------------------------------------------------
------------------:1-空格顯示/2-空格顯示為@/3-套打顯示/4-一級列印/5-一級套打/6-二級列印
目前顯示方式 :1
請輸入新的顯示方式:2
--------------------------------------------------------------------------------
┌────┬─────┬─────────┐
│@@@@@@@@│@@@@@@@@@@│@@@@@@@@@@@@@@@@@@│
├─┬──┼─┬─┬─┼─┬─┬─┬─┬─┤
│@@│@@@@│@@│@@│@@│@@│@@│@@│@@│@@│
│@@│@@@@│@@│@@│@@│@@│@@│@@│@@│@@│
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│@@│@@@@│@@│@@│@@│@@│@@│@@│@@│@@│
├─┼──┼─┼─┼─┼─┼─┼─┼─┼─┤
│@@│@@@@│@@│@@│@@│@@│@@│@@│@@│@@│
├─┴──┴─┴─┴─┴─┴─┴─┴─┴─┤
│@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@│
└────────────────────┘
#-------------------------------------------------------------------------------
5.列印圖形映射參數标簽資訊
#--:1-設定顯示方式,2-列印圖像,3-列印圖像到臨時檔案,4-列印圖像參數
#--:5-列印圖形參數到s檔案,6-讀取s圖像參數資訊到工具,7-列印圖像及參數到s檔案
#--:q-退出,exit-退出程式
#-------------------------------------------------------------------------------
請選擇操作類型:4
--------------------------------------------------------------------------------
--:row:5:1 2 1 1 1:行數及行寬
--:list:10:1 2 1 1 1 1 1 1 1 1:列數及列寬
--:change:1 1 1 2,1 3 1 5,1 6 1 10,5 1 5 10:圖像變換指令
--:left:0:左邊距
--:up:0:上邊距一級文本
--:up2:上邊距二級文本
--:one:5:表格一級文本
[01]:
[02]:
[03]:
[04]:
[05]:
--:two:5:表格二級文本
[01]:
[02]:
[03]:
[04]:
[05]:
--:down:0:下邊距一級文本
--:down2:0:下邊距二級文本
#-------------------------------------------------------------------------------
#--:1-設定顯示方式,2-列印圖像,3-列印圖像到臨時檔案,4-列印圖像參數
#--:5-列印圖形參數到s檔案,6-讀取s圖像參數資訊到工具,7-列印圖像及參數到s檔案
#--:q-退出,exit-退出程式
#-------------------------------------------------------------------------------
請選擇操作類型:q
#-------------------------------------------------------------------------------
#------------------------------:【主界面】:-------------------------------------
#--:1-調整行數列數及行寬列寬,2-繪制圖形樣式,3-設定圖像文本,4-列印圖像資訊
#--:s-設定列印,p-列印圖像,q-退出程式
#-------------------------------------------------------------------------------
請輸入指令:
11.3 AE算法
11.3.1 總體說明
通過AE腳本可以輕松實作各種複雜 算法,由于目前項目用到的算法都非常簡單,自己可以設定算法場景,讓AE去實作。
11.3.2 發紅包
通過随機數然後通過讀取[ae user]資料,可以很友善的實作紅包的生成與配置設定。
參考源碼:
#:hongbao:game:紅包算法遊戲
--------------------------------------------------------------------------------
--:1:sh:錢選人,算法複雜度=金額*100 -- 速度慢
--------------------------------------------------------------------------------
tippara="請輸入金額(def:10),請輸入紅包數量(def:5)"
para1=$(ae para 1 1)
para2=$(ae para 1 2)
amt=$(echo $para1|awk -F, '{printf "%d",$1*100}')
num=$para2
function rand
{
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000))
echo $(($num%$max+$min))
}
if [ $amt -lt $num ];then
echo "para err!"
exit 0
fi
i=1
while [ $i -le $num ]
do
eval money$i=1
i=$(expr $i + 1)
done
i=1
while [ $i -le $(expr $amt - $num) ]
do
j=$(rand 1 $num)
eval money$j=$(eval echo "\$money$j"|awk '{printf "%d",$1+1}')
i=$(expr $i + 1)
done
i=1
while [ $i -le $num ]
do
eval echo "$i,\$money$i"|awk -F, '{printf "第%3s 個紅包,金額:%6.2f 元\n",$1,$2/100}'
i=$(expr $i + 1)
done
--------------------------------------------------------------------------------
--:2:sh:人選錢,算法複雜度=紅包數量 -- 不是完全的随機
--------------------------------------------------------------------------------
tippara="請輸入金額(def:10),請輸入紅包數量(def:5)"
para1=$(ae para 1 1)
para2=$(ae para 1 2)
amt=$(echo $para1|awk -F, '{printf "%d",$1*100}')
num=$para2
function rand
{
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000))
echo $(($num%$max+$min))
}
if [ $amt -lt $num ];then
echo "para err!"
exit 0
fi
amt=$(expr $amt - $num)
i=1
t=0
while [ $i -le $num ]
do
j=$(rand 1 $(expr $num \* 10))
eval money$i=$j
t=$(expr $t + $j)
i=$(expr $i + 1)
done
i=1
n=0
while [ $i -lt $num ]
do
fenshu=$(eval echo "\$money$i")
m=$(echo $amt,$fenshu,$t|awk -F, '{printf "%.2f",$1*($2/$3)/100}')
n=$(echo $m,$n|awk -F, '{printf "%.2f",$1+$2}')
echo $i,$m|awk -F, '{printf "第%3s 個紅包,金額:%6.2f 元\n",$1,$2+0.01}'
i=$(expr $i + 1)
done
m=$(echo $amt,$n|awk -F, '{printf "%.2f",$1/100-$2}')
echo $num,$m|awk -F, '{printf "第%3s 個紅包,金額:%6.2f 元\n",$1,$2+0.01}'
--------------------------------------------------------------------------------
--:3:sh:人選錢,剩下的錢選人 算法複雜度:紅包數量+1
--------------------------------------------------------------------------------
tippara="請輸入金額(def:10),請輸入紅包數量(def:5)"
para1=$(ae para 1 1)
para2=$(ae para 1 2)
amt=$(echo $para1|awk -F, '{printf "%d",$1*100}')
num=$para2
function rand
{
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000))
echo $(($num%$max+$min))
}
if [ $amt -lt $num ];then
echo "para err!"
exit 0
fi
amt=$(expr $amt - $num)
i=1
t=0
while [ $i -le $num ]
do
j=$(rand 1 $(expr $num \* 10))
eval money$i=$j
t=$(expr $t + $j)
i=$(expr $i + 1)
done
i=1
n=0
while [ $i -le $num ]
do
fenshu=$(eval echo "\$money$i")
m=$(echo $amt,$fenshu,$t|awk -F, '{printf "%d",$1*($2/$3)}')
n=$(echo $m,$n|awk -F, '{printf "%d",$1+$2}')
eval ren$i=$m
i=$(expr $i + 1)
done
i=1
j=$(expr $amt - $n)
while [ $i -le $j ]
do
k=$(rand 1 $num)
eval ren$k=$(eval echo "\$ren$k"|awk '{printf "%d",$1+1}')
i=$(expr $i + 1)
done
i=1
while [ $i -le $num ]
do
mm=$(eval echo "\$ren$i"|awk '{printf "%.2f",($1+1)/100}')
echo $i,$mm|awk -F, '{printf "第%3s 個紅包,金額:%6.2f 元\n",$1,$2}'
i=$(expr $i + 1)
done
--------------------------------------------------------------------------------
11.3.3 AE三打十五
通過AE實作三大食物遊戲算法。(待完善)
11.3.4 AE簡筆畫
通過AE實作flash算法。(待完善)
11.3.5 AE象棋
通過AE實作象棋算法。(待完善)
- 工具源碼及相關開發文檔下載下傳 ↩︎