TCL基础篇---基本语法(持续更新)
文章目錄
- TCL基本入門
- append的用法
- incr的用法
- 常見列表
- llength:返回一個列表的元素個數
- lindex :返回索引值對應的列表元素
- lrange:返回指定區間的列表元素
- lassign:將列表元素賦值給變量
- lappend 在原列表后面添加元素
- lreplace列表元素替換
- lset 列表元素設置
- linsert 在指定索引值的列表中插入新值
- lsort:對列表內的元素排序
- lreverse:反向列表
- TCL控制流
- if命令
- 循環命令:while、for、foreach
- eval命令
- source -e -v
- 提示
- 參考文章:
從業IC的人員都知道tcl語言對于測試人員或者說設計人員都是非常重要的一門語言,為了建立更好的自動化測試環境,我們可能不僅僅是只需要了解那份執行的scripts,也可能需要知道環境里面的scripts,而里面必然涉及到一些選擇語句等等,如果能把tcl的知識掌握好,然后再去做幾個測試練習,最后,自己動手寫幾個腳本,再帶著這樣的思想去揣摩工作中的環境,想必能力上會有更好地提升。
tcl系列博文,將為這些能力打下一個基礎前提。分為三篇: 基礎篇、 練習篇、 實際項目篇。
TCL基本入門
TCL解釋器對一個命令的求值分為了:分析和執行
分析:把命令分解為獨立的單詞,進行必要的置換動作。
執行:把第一個單詞當做命令,查看這個命令是否有定義,有的話激活其對應的內部動作。
置換分了了三種:
1、變量置換 $
2、命令置換 [ ]
3、反斜杠置換
解釋:
%set x 10 %set y [expr $x + 100]y的值是110,當TCL解釋器遇到字符 【 ,它就會把隨后expr作為一個命令名,從而激活expr對應的動作,如果我們去掉【 】,TCL會報錯,正常情況下只把命令行中的第一個單詞作為命令,注意【】中必須是一個合法的TCL腳本,長度不限?!尽恐械哪_本的值為最后一個命令的返回值。
%set y [expr $x+100;set b 300]//y 的值為300反斜杠置換中,在單詞符號中插入換行符、空格、【、$等被TCL解釋器當做特殊符號對待的字符。
雙引號和花括號:
TCL解釋器對雙引號中的各種分隔符將不做處理,但是對換行符、以及$ 和【】兩種置換符會照常處理。
在花括號中,所有特殊字符都將被成為普通字符,失去特殊意義。
%set y {/n$x [expr 10 +100]} /n$x [expr 10 +100]數組
數組不需要聲明,直接賦值即可,也不必按照順序來:
set i(1) 123 ; set i(16) hi
當然也支持任意維數的數組:
set i(1,2,3) hi
引用的時候直接$i(1,2,3)即可
set與unset
一個是設置變量,一個刪除變量。
append的用法
append的目的是將新的單詞追加到原來舊的變量后面,而不是像set那樣去替換原來這個舊的變量。
1) % set x hello hello % set y world world % set x "$x$y" helloworld 2) % set x hello hello % set y world world % append x $y helloworld所以我們常可以看到dc里面設置search_path的時候,我們會用append,而不是用set去替換。
incr的用法
incr后面跟兩個數,第一個參數為變量名,第二個參數為整數(默認為1),incr的目的就是將這個整數的值加到這個變量名的值上面,然后將結果存儲到這個變量名中。
相當于a=a+number,值得一提的是不管是a還是number都必須要是整數,不可以為小數。
常見列表
列表作為TCL中的一種重要的數據結構:
1、使用{ }創建
2、通過list進行創建
因為list本身就是一個TCL,因此與set一起使用的時候就要用到命令置換符【】
3、通過contact命令創建列表
contact的參數可以使任意多個列表,從而實現列表的拼接
4、通過lrepeat命令創建列表
lrepeat命令接收兩個參數,第一個參數是重復次數,第二個參數是重復值。
5、創建空的列表
空的列表不包含任何值,通常用于列表的初始化??梢酝ㄟ^{},也可以通過list創建空列表。
創建列表的方法有很多種,但list是最常見的。
另外上面介紹的列表除了創建一個新的列表,還有基于列表為元素的,這里我將其分開。
基于單詞元素和列表元素的有: { } 、list、lrepeat
其余都是基于列表元素
list與contact的區別:
concat是去掉了一層列表結構后,再組合所有的元素
llength:返回一個列表的元素個數
llength list
lindex :返回索引值對應的列表元素
元素的下標從0開始算起。如果沒有index參數就返回整個列表,如果index對應的元素還是一個列表就返回對應子列表中的元素。
lrange:返回指定區間的列表元素
lrange list first last返回列表list一個區間的元素,區間由first和last指定
lassign:將列表元素賦值給變量
lappend 在原列表后面添加元素
lappend命令接收一個變量名(列表名),將元素添加到原列表后面
lreplace列表元素替換
lset 列表元素設置
lset和lappend一樣接收一個變量名作為參數,也會修改變量的值,將列表中的指定索引元素修改為指定的新值,如果不指定索引項就把整個列表換成新值。
linsert 在指定索引值的列表中插入新值
在索引位index的前面插入元素,產生一個新的列表
lsort:對列表內的元素排序
lsort ?options?list
1)按照ASCII碼的順序排序,是默認狀態。
2)按照字典順序排序。
3)按照浮點數排序,要求列表里面的元素都能夠正確的轉化為浮點數。
4)按照整數排序,要求列表里面的元素都能夠正確轉化為整數.
1)-increasing 按照升序排列
2)-decreasing 按照降序排列
3)-indices 返回排序后的元素在原列表中的索引
4)-nocase 忽略大小寫
lreverse:反向列表
返回一個列表,新的列表為原列表的反序形式。
TCL控制流
if命令
注意, { 一定要寫在上一行,因為如果不這樣,TCL解釋器會認為if命令在換行符處已結束,下一行會被當成新的命令,從而導致錯誤的結果。書寫中還要注意一個問題是if和{之間應該還有一個空格,否則TCL解釋器會把 “if{” 作為一個整體當做一個命令名,從而導致錯誤。
循環命令:while、for、foreach
while
for
foreach
主要功能是遍歷列表中的元素。
主要用法有三種形式:
1、
2、
可以對列表進行多個元素一起賦值,這時varname是一個n個元素列表結構,每次遍歷list列表中的n個元素賦值給以varname列表元素為名稱的變量。
3、
遍歷多個列表中的元素,這里舉例以varname為單個元素為例:
可以利用這個技巧給變量賦值,比如把一個列表中的前3個元素分別賦值給
var1、var2和var3:% foreach {var1 var2 var3} {a b c d e f} {break;}% puts "$var1 $var2 $var3"a b c\ 仔細體會一下break的妙用吧。
eval命令
eval是調用一個TCL腳本
eval arg ?arg...?如果是一個參數,那么相當于把這個參數當做命令來執行
如果有多個參數,eval命令會把多個參數以concat命令風格連接起來然后再執行命令。
source -e -v
-e代表echo
-v代表verbose
好文:
https://my.oschina.net/u/4579346/blog/4426952
-e代表echo執行了哪些cmd
-v代表每一行cmd執行的結果。
https://blog.csdn.net/icxiaoge/article/details/102770805
提示
在資料中你也許經常會碰到 ?的書寫方法,影響你的閱讀體驗
例如下圖:
參考文章:
https://blog.csdn.net/long_fly/article/details/78897158?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242
http://m.elecfans.com/article/817355.html
https://blog.csdn.net/dongyanxia1000/article/details/50682376
https://blog.csdn.net/dulixin/article/details/2410015
https://blog.csdn.net/dulixin/article/details/2410030
https://my.oschina.net/u/4579346/blog/4426952
https://blog.csdn.net/icxiaoge/article/details/102770805
總結
以上是生活随笔為你收集整理的TCL基础篇---基本语法(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VCS-bilibili教程篇1-Deb
- 下一篇: DC_command的部分理解(持续更新