版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、制造:測試部日期:2019-03-12制造:某某部時(shí)間:2019-1-11、TCL腳本語言介紹2、TCL的語法3、TCL的變量4、TCL的表達(dá)式5、TCL常用命令6、TCL的控制7、TCL的過程8、TCL的字符串操作9、TCL的list10. 學(xué)習(xí)TCL的一些建議和方法針對(duì)TCl腳本語言的新手2小時(shí)田顯蘭使沒有接觸過TCL腳本語言的同事對(duì)TCL腳本語言的基礎(chǔ)概念和基礎(chǔ)知識(shí)有一定的了解??梢允褂肨CL腳本語言進(jìn)行簡單的編程。培訓(xùn)目的培訓(xùn)目的培訓(xùn)對(duì)象培訓(xùn)對(duì)象培訓(xùn)講師培訓(xùn)講師學(xué)習(xí)重點(diǎn)學(xué)習(xí)重點(diǎn)培訓(xùn)課時(shí)培訓(xùn)課時(shí)1、TCL腳本語言介紹TCL腳本語言培訓(xùn) TCL(Tool Command Language)
2、是一種解釋執(zhí)行的腳本語是一種解釋執(zhí)行的腳本語言言 提供通用的編程能力:支持變量、過程和控制結(jié)構(gòu),經(jīng)常被提供通用的編程能力:支持變量、過程和控制結(jié)構(gòu),經(jīng)常被用于快速原型開發(fā),腳本編程,用于快速原型開發(fā),腳本編程,GUI和測試等方面和測試等方面 TCL擁有一個(gè)功能強(qiáng)大的固有的核心命令集,同時(shí)支持根據(jù)擁有一個(gè)功能強(qiáng)大的固有的核心命令集,同時(shí)支持根據(jù)需要對(duì)需要對(duì)TCL語言進(jìn)行擴(kuò)展語言進(jìn)行擴(kuò)展 解釋器同等對(duì)待固有命令集和擴(kuò)展命令集解釋器同等對(duì)待固有命令集和擴(kuò)展命令集 TCL的優(yōu)點(diǎn):語法簡單,解釋執(zhí)行,可擴(kuò)展,跨平臺(tái)的優(yōu)點(diǎn):語法簡單,解釋執(zhí)行,可擴(kuò)展,跨平臺(tái)2、TCL的語法簡單的講:TCL語言的語法就是一
3、些TCL解釋器怎樣對(duì)TCL命令進(jìn)行分析的規(guī)則的集合。TCL命令的基本語法為:command arg1 arg2 arg3 TCL腳本語言培訓(xùn)2、TCL的語法2-1、腳本、命令和單詞符號(hào)一個(gè)TCL腳本可以包含一個(gè)或多個(gè)命令。命令之間必須用換行符或分號(hào)隔開。在所有TCL腳本中,系統(tǒng)內(nèi)部的命令名是小寫格式 Example: set a 100 set b 101 set c 102;set d 103TCL的每一個(gè)命令包含一個(gè)或幾個(gè)單詞,第一個(gè)單詞代表命令名,另外的單詞則是這個(gè)命令的參數(shù),單詞之間必須用空格或TAB鍵隔開 。命令之間是可以嵌套的Example: set a 100 set b exp
4、r $a +1TCL腳本語言培訓(xùn)2-2、置換的引入2、TCL的語法TCL解釋器對(duì)一個(gè)命令的求值過程分為兩部分:分析和執(zhí)行。在分析階段,TCL 解釋器運(yùn)用規(guī)則把命令分成一個(gè)個(gè)獨(dú)立的單詞,同時(shí)進(jìn)行必要的置換(substitution); 在執(zhí)行階段,TCL 解釋器會(huì)把第一個(gè)單詞當(dāng)作命令名,并查看這個(gè)命令是否有定義,如果有定義就激活這個(gè)命令對(duì)應(yīng)的C/C+過程,并把所有的單詞作為參數(shù)傳遞給該命令過程,讓命令過程進(jìn)行處理。Example: set log “test” set currentfilename “test.tcl” LOG:AppErr $log expr $namespace curre
5、nt:currentfilename “error” 置換可以發(fā)生在包含命令名在內(nèi)的每一個(gè)單詞中,而且置換可以嵌套Example: set a 1 set b$a 2TCL提供三種形式的置換:變量置換、命令置換和反斜杠置換。TCL腳本語言培訓(xùn)2-3、三種置換類型2、TCL的語法變量置換由一個(gè) $ 符號(hào)標(biāo)識(shí),變量置換會(huì)導(dǎo)致變量的值插入一個(gè)單詞中。TCL解釋器在分析一個(gè)變量置換時(shí),只把從 $ 往后直到第一個(gè)不是字符,數(shù)字或下劃線的字符之間的單詞符號(hào)作為被置換的變量的名字 Example: set a “hello”;set a_1 “hello”; set a-1 “hello” set b “$
6、a world!”;set c “$a_1 world!”;set d “$a-1 world!”命令置換是由 括起來的TCL命令及其參數(shù)。命令置換會(huì)導(dǎo)致某一個(gè)命令的所有或部分單詞被另一個(gè)命令的結(jié)果所代替。 中必須是一個(gè)合法的TCL腳步,長度不限。 中腳本的值為最后一個(gè)命令的返回值Example: set b expr 100*10反斜杠替換相當(dāng)于C語言中反斜杠的作用 ,主要用于在單詞符號(hào)中插入諸如換行符、空格、$等被TCL解釋器當(dāng)作特殊符號(hào)對(duì)待的字符 Example: set a a set b $100TCL腳本語言培訓(xùn)2-4、雙引號(hào)和花括號(hào)2、TCL的語法除了使用反斜杠外,TCL提供另外
7、兩種方法來使得解釋器把分隔符和置換符等特殊字符當(dāng)作普通字符,而不作特殊處理,這就要使用雙引號(hào)(“”)和花括號(hào)()。 TCL解釋器對(duì)雙引號(hào)中的各種分隔符將不作處理,但是對(duì)換行符 及$和兩種置換符會(huì)照常處理。 Example: set a 1;set b 2 puts “c = expr $a+$b”而在花括號(hào)中,所有特殊字符都將成為普通字符,失去其特殊意義,TCL解釋器不會(huì)對(duì)其作特殊處理。 Example: set a 1;set b 2 puts c = expr $a+$bTCL腳本語言培訓(xùn)2-5、注釋2、TCL的語法TCL中的注釋符是,和直到所在行結(jié)尾的所有字符都被TCL看作注釋,TCL解
8、釋器對(duì)注釋將不作任何處理。不過,要注意的是,必須出現(xiàn)在TCL解釋器期望命令的第一個(gè)字符出現(xiàn)的地方,才被當(dāng)作注釋 。Example: #This is a comment set a 100 # Not a comment set b 100 ;#This is a commentTCL腳本語言培訓(xùn)3、變量TCL腳本語言培訓(xùn)TCL支持兩種類型的變量:簡單變量和數(shù)組。簡單變量包含兩個(gè)部分:名字和值。名字和值都可以是任意字符串。例如一個(gè)名為 “1323 7&*: hdgg的變量在TCL中都是合法的。不過為了更好的使用置換(substitution),變量名最好按CC+語言中標(biāo)識(shí)符的命名規(guī)則命
9、名。 TCL解釋器在分析一個(gè)變量置換時(shí),只把從$符號(hào)往后直到第一個(gè)不是字母、數(shù)字或下劃線的字符之間的單詞符號(hào)作為要被置換的變量的名字。 數(shù)組是一些元素的集合。TCL的數(shù)組和普通計(jì)算機(jī)語言中的數(shù)組有很大的區(qū)別。在TCL中,不能單獨(dú)聲明一個(gè)數(shù)組,數(shù)組只能和數(shù)組元素一起聲明。數(shù)組中,數(shù)組元素的名字包含兩部分:數(shù)組名和數(shù)組中元素的名字,TCL中數(shù)組元素的名字下標(biāo)可以為任何字符串 Example: set day(monday) 1 set day(tuesday) 2 TCL不能支持復(fù)雜的數(shù)據(jù)類型 4、表達(dá)式TCL腳本語言培訓(xùn)TCL中的表達(dá)式類似于ANSI C的表達(dá)式。表達(dá)式由操作數(shù)和操作符構(gòu)成。TC
10、L表達(dá)式的操作數(shù)通常是整數(shù)或?qū)崝?shù)。整數(shù)一般是十進(jìn)制的, 但如果整數(shù)的第一個(gè)字符是0(zero),那么TCL將把這個(gè)整數(shù)看作八進(jìn)制的,如果前兩個(gè)字符是0 x則這個(gè)整數(shù)被看作是十六進(jìn)制的。TCL的實(shí)數(shù)的寫法與ANSI C中完全一樣。 TCL中用到的運(yùn)算符,它們的語法形式和用法跟ANSI C中很相似 。需要注意的一點(diǎn)是,數(shù)學(xué)函數(shù)并不是命令,只在表達(dá)式中出現(xiàn)才有意義。 expr 命令: expr arg ?arg .? expr可以有一個(gè)或多個(gè)參數(shù),它把所有的參數(shù)組合到一起,作為一個(gè)表達(dá)式,然后求值 Example: expr 12*3 5-1、set、puts、unset5、TCL的常用命令TCL腳
11、本語言培訓(xùn) set命令用于定義變量或讀取變量的值命令格式:set varName ?value?Example: set test 100 set test puts命令用于寫指定內(nèi)容到指定通道命令格式: puts ?-nonewline? ?channelId? stringExample: puts “hello world!” puts nonewline “hello, ShangHai!“ unset命令用于刪除一個(gè)變量命令格式:unset ?-nocomplain? ?-? ?name name name .?Example: unset test5-2、append、incr5、
12、TCL的常用命令TCL腳本語言培訓(xùn) append命令用于把文本加到一個(gè)變量的后面 命令格式:append varName ?value value value .?Example: append test “hello” append a $b vs set a $a$b incr命令用于增加變量的值命令格式:incr varName ?increment?Example: incr test 2 incr test incr test -16-1、if6、TCL的控制TCL腳本語言培訓(xùn)命令格式:if expr1 ?then? body1 elseif expr2 ?then? body2 e
13、lseif . ?else? ?bodyN?Example: if $vbl = 1 puts vbl is one if $vbl = 1 puts vbl is one else puts vbl is not one if $vbl = 1 puts vbl is one elseif $vbl = 2 puts vbl is two else puts vbl is not one or two if $vbl = 1 | $vbl = 2 | $vbl = 3 then puts vbl is one, two or three 留意: if 和 之間一定要有空格,body的一定要與
14、if同行6-2、for6、TCL的控制TCL腳本語言培訓(xùn)命令格式:for start test next bodyExample: for set x 0 $x10 incr x puts x is $x“ for set x 0 $x10 incr x puts x is $x 留意: test必須用花括號(hào)括起來,推遲置換。6-3、while6、TCL的控制TCL腳本語言培訓(xùn)命令格式:while test bodyExample: set x 0 while $x10 puts x is $x incr x 留意: test必須用花括號(hào)括起來,推遲置換。6-4、foreach6、TCL的控制
15、TCL腳本語言培訓(xùn)命令格式:foreach varname list bodyforeach varlist1 list1 ?varlist2 list2 .? bodyExample: set values 1 3 5 7 2 4 6 8 foreach x $values puts $x set x foreach i j a b c d e f lappend x $j $i foreach i a b c j d e f g lappend x $i $j 6-5、switch6、TCL的控制TCL腳本語言培訓(xùn)命令格式:switch ?options? string pattern b
16、ody ?pattern body .?switch ?options? string pattern body ?pattern body .?Example: switch xyz a - b expr 1 c expr 2 default expr 3 7、TCL的過程TCL腳本語言培訓(xùn)TCL支持過程的定義和調(diào)用,在TCL中,過程可以看作是用TCL腳本實(shí)現(xiàn)的命令,效果與TCL的固有命令相似。我們可以在任何時(shí)候使用proc命令定義自己的過程,TCL中的過程類似于C中的函數(shù)。過程的返回值是過程體中最后執(zhí)行的那條命令的返回值 proc命令用于創(chuàng)建一個(gè)TCL過程命令格式:proc name ar
17、gs bodyExample:proc printArguments args foreach arg $args puts $arg proc mult varName multiplier 2 upvar 1 $varName var set var expr $var * $multiplier 7-1、過程的定義7、TCL的過程TCL腳本語言培訓(xùn) TCL支持三種參數(shù)類型:無參數(shù)、缺省參數(shù)、可變參數(shù)支持三種參數(shù)類型:無參數(shù)、缺省參數(shù)、可變參數(shù)Example:proc add expr 2+3 proc add val1 val2 2 val3 3 expr $val1+$val2+$va
18、l3 proc add val1 args set sum $val1 foreach i $args incr sum $i return $sum 7-2、過程的參數(shù)7、TCL的過程TCL腳本語言培訓(xùn)對(duì)于在過程中定義的變量,因?yàn)樗鼈冎荒茉谶^程中被訪問,并且當(dāng)過程退出時(shí)會(huì)被自動(dòng)刪除,所以稱為局部變量;在所有過程之外定義的變量我們稱之為全局變量。TCL中,局部變量和全局變量可以同名,兩者的作用域的交集為空:局部變量的作用域是它所在的過程的內(nèi)部;全局變量的作用域則不包括所有過程的內(nèi)部。這一點(diǎn)和C語言有很大的不同.如果我們想在過程內(nèi)部引用一個(gè)全局變量的值,可以使用global命令 Example:
19、 set a 100 proc sample x global a incr a return expr $a+$x 7-3、局部變量與全局變量7、TCL的過程TCL腳本語言培訓(xùn)upvar命令用于用戶在過程中對(duì)全局變量或其他過程中的局部變量進(jìn)行訪問命令格式:upvar ?level? otherVar myVar ?otherVar myVar .? upvar命令的第一個(gè)參數(shù)otherVar是我們希望以引用方式訪問的參數(shù)的名字,第二個(gè)參數(shù)myVar 是這個(gè)過程中的局部變量的名字,一旦使用了upvar 命令把otherVar 和myVar 綁定,那么在過程中對(duì)局部變量myVar 的讀寫就相當(dāng)于
20、對(duì)這個(gè)過程的調(diào)用者中otherVar 所代表的局部變量的讀寫。 level參數(shù)表示:調(diào)用upvar命令的過程相對(duì)于我們希望引用的變量myVar在調(diào)用棧中相對(duì)位置 Example:proc temp arg upvar $arg b set b expr $b+2 upvar 2 other x ;#訪問當(dāng)前過程的調(diào)用者的調(diào)用者中的otherupvar #0 other x ;#訪問全局的變量other7-4、引用upvar8、TCL的字符串操作一)TCL腳本語言培訓(xùn) string命令具有強(qiáng)大的操作字符串的功能,其中的命令具有強(qiáng)大的操作字符串的功能,其中的option選項(xiàng)多達(dá)選項(xiàng)多達(dá)20個(gè)個(gè)st
21、ring compare ?-nocase? ?-length int? string1 string2 把字符串把字符串string1和和string2進(jìn)行比較進(jìn)行比較,返回值為返回值為-1、0或或1,分別對(duì)應(yīng)分別對(duì)應(yīng)string1小于、小于、等于或大于等于或大于string2。如果有。如果有 -length 參數(shù),那么只比較前參數(shù),那么只比較前 int 個(gè)字符,假設(shè)個(gè)字符,假設(shè) int為負(fù)數(shù),那么這個(gè)參數(shù)被忽略。為負(fù)數(shù),那么這個(gè)參數(shù)被忽略。 如果有如果有 -nocase參數(shù),那么比較時(shí)不區(qū)分大小參數(shù),那么比較時(shí)不區(qū)分大小寫。寫。 string equal ?-nocase? ?-lengt
22、h int? string1 string2 把字符串把字符串string1和和string2進(jìn)行比較,如果兩者相同,返回值為進(jìn)行比較,如果兩者相同,返回值為1,否則返回,否則返回0。其他參數(shù)與其他參數(shù)與string compare同。同。 string first string1 string2 ?startindex?在在string2 中從頭查找與中從頭查找與string1匹配的字符序列,如果找到,那么就返回匹配匹配的字符序列,如果找到,那么就返回匹配的第一個(gè)字母所在的位置的第一個(gè)字母所在的位置(0-based)。如果沒有找到,那么返回。如果沒有找到,那么返回-1。如果給出了。如果給出了
23、startindex變量,那么將從變量,那么將從startindex處開始查找。處開始查找。 8、TCL的字符串操作二)TCL腳本語言培訓(xùn) string index string charIndex 返回返回string 中第中第charIndex個(gè)字符個(gè)字符(0-based)。charIndex可以是下面的值:可以是下面的值: 整數(shù)整數(shù)n: 字符串中第字符串中第n個(gè)字符個(gè)字符(0-based) end : 最后一個(gè)字符最后一個(gè)字符 end整數(shù)整數(shù)n:倒數(shù)第:倒數(shù)第n個(gè)字符。個(gè)字符。string index abcd end-1 返回字符返回字符c 如果如果charIndex小于小于0,或者大
24、于字符串,或者大于字符串string的長度,那么返回空。的長度,那么返回空。string last string1 string2 ?startindex?參照參照string first.唯一的區(qū)別是從后往前查找唯一的區(qū)別是從后往前查找 string length string 返回字符串返回字符串string的長度的長度. string match ?-nocase? pattern string 如果如果pattern 匹配匹配string,那么返回那么返回1,否則返回否則返回0.如果有如果有-nocase參數(shù)參數(shù),那么就不區(qū)那么就不區(qū)分大小寫分大小寫. 8、TCL的字符串操作三)TCL
25、腳本語言培訓(xùn)string range string first last返回字符串返回字符串string中從第中從第first個(gè)到第個(gè)到第last個(gè)字符的子字符串個(gè)字符的子字符串(0-based)。如果。如果first0,那么,那么first被看作被看作0,如果,如果last大于或等于字符串的長度,那么大于或等于字符串的長度,那么last被看被看作作end,如果,如果first比比last大,那么返回空。大,那么返回空。 string repeat string count返回值為:重復(fù)了返回值為:重復(fù)了string字符串字符串count次的字符串次的字符串string replace str
26、ing first last ?newstring?返回值為:從字符串返回值為:從字符串string 中刪除了第中刪除了第first到第到第last個(gè)字符個(gè)字符(0-based)的字符串,的字符串,如果給出了如果給出了newstring變量,那么就用變量,那么就用newstring替換從第替換從第first到第到第last個(gè)字符。個(gè)字符。如果如果first0,那么,那么first被看作被看作0,如果,如果last大于或等于字符串的長度,那么大于或等于字符串的長度,那么last被看作被看作end,如果,如果first比比last大或者大于字符串大或者大于字符串string的長度或者的長度或者la
27、st小于小于0,那,那么原封不動(dòng)的返回么原封不動(dòng)的返回string string tolower string ?first? ?last? 返回值為:把字符串返回值為:把字符串string轉(zhuǎn)換成小寫后的字符串,如果給出了轉(zhuǎn)換成小寫后的字符串,如果給出了first和和last變量,變量,就只轉(zhuǎn)換就只轉(zhuǎn)換first和和last之間的字符。之間的字符。 9、TCL的list一)TCL腳本語言培訓(xùn)list這個(gè)概念在TCL中是用來表示集合的。TCL中l(wèi)ist是由一堆元素組成的有序集合,list可以嵌套定義,list每個(gè)元素可以是任意字符串,也可以是list。list是TCL中比較重要的一種數(shù)據(jù)結(jié)構(gòu),對(duì)
28、于編寫復(fù)雜的腳本有很大的幫助,TCL提供了很多基本命令對(duì)list進(jìn)行操作 list命令 用于創(chuàng)建一個(gè)list命令格式: list ? value value.? concat命令把多個(gè)list合成一個(gè)list,每個(gè)list變成新list的一個(gè)元素命令格式:concat list ?list.? lindex命令返回list的第index個(gè)(0-based)元素 命令格式:lindex list index llength命令返回list的元素個(gè)數(shù)命令格式:llength list 9、TCL的list(二)TCL腳本語言培訓(xùn)linsert命令返回一個(gè)新串,新串是把所有的value參數(shù)值插入li
29、st的第index個(gè)(0-based)元素之前得到命令格式:linsert list index value ?value.? lreplace命令返回一個(gè)新串,新串是把list的第first (0-based)到第last 個(gè)(0-based)元素用所有的value參數(shù)替換得到的。如果沒有value參數(shù),就表示刪除第first到第last個(gè)元素。 命令格式:lreplace list first last ?value value .? lrange 命令返回list的第first (0-based)到第last (0-based)元素組成的串,如果last的值是end。就是從第first個(gè)直到串的最后 命令格式:lrange list first last lappend命令把每個(gè)value的值作為一個(gè)元素附加到變量varname后面,并返回變量的新值,如果varname不存在,就生成這個(gè)變量 命令格式:lappend varname value ?value.? 9、TCL的list(三)TCL腳本語言培訓(xùn)lsearch 命令返回list中第一個(gè)匹配模式pattern的元素的索引,如果找不到匹配就返回-1命
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人工作表揚(yáng)信(15篇)
- 會(huì)計(jì)求職信 關(guān)于會(huì)計(jì)專業(yè)的求職信
- 五月五端午節(jié)慰問信
- 中國各地酒類廣告語
- DB12T 591-2015 從業(yè)人員預(yù)防性健康檢查技術(shù)規(guī)范
- 個(gè)人購房收入證明范本(7篇)
- 個(gè)人工資收入證明范本(6篇)
- 腎臟課件簡易教學(xué)課件
- 繪畫牙膏課件教學(xué)課件
- 背景課件可愛教學(xué)課件
- (新教材)青島版六三制四年級(jí)下冊(cè)科學(xué)全冊(cè)教案(含教學(xué)計(jì)劃)
- 留學(xué)生管理工作計(jì)劃
- 遺體防腐整容之遺體消毒之選擇使用消毒劑課件
- 傳統(tǒng)音樂與現(xiàn)代音樂的融合與共生
- 老人康復(fù)治療知識(shí)講座
- 物流倉儲(chǔ)招商策劃制定
- 項(xiàng)目式課程與全課程設(shè)計(jì)
- 少兒體智能特色課程設(shè)計(jì)
- AFP、DCP和GGT聯(lián)合檢測在原發(fā)性肝癌診斷中的應(yīng)用價(jià)值演示稿件
- 植物生理學(xué)試題及答案7
- 《消毒隔離制度》課件
評(píng)論
0/150
提交評(píng)論