没有最好,只有更好!

TCL脚本语言学习

上一篇 / 下一篇  2009-03-01 23:36:18 / 个人分类:测试工具

####################################
-~2Fv1`/@Wk0#                                  #51Testing软件测试网Az"h4EA3K9KJ1T&v FL
#           TCL脚本学习笔记          #
u'OTAD"hT0#                                  #51Testing软件测试网7| t"O!VU J)n&J
####################################

!X4uM4P~4P \n0

【摘要】:这里通过在TCL命令窗口来学习TCL的基本的命令语法。51Testing软件测试网WAN*B@

% set a 10 ; set b "testing"51Testing软件测试网 ciLM I1Z.\!e `
testing
2@T*tk%s#IE-}0% set x 10
:D| d }4NS6\)]:}F"_01051Testing软件测试网c Pq"b4{vgy
% set y x+10051Testing软件测试网F6? w0r{t#Y1vT? L
x+10051Testing软件测试网1Dej? Tw
% set y $x+100
Dit h4}z*x5mUE7B010+10051Testing软件测试网1vh6x8T mo6mV3n\xg
% set y [expr $x + 100]
8p+@2W$@j&Z^011051Testing软件测试网 ?4C#Y3I:QZ C
% set y [set z 200; expr $z + 100;]51Testing软件测试网HdH%xK)_
30051Testing软件测试网B3m&mQO;TzB.e
% puts 反斜杠置换
'`nb4o'{r%`3_C0反斜杠置换
Z(R9NI;p2FC0% set msg multiple\ space51Testing软件测试网UQ8wM3z,Mivf
multiple space51Testing软件测试网l9ms nz oe1n
% set msg multiple space51Testing软件测试网3M2u"J(Fs#V
wrong # args: should be "set varName ?newValue?"51Testing软件测试网~VP._u U?;D h
% puts c出现错误的原因是后面的元素内部不能允许有空格,上上一例就用反斜杠起作用
0[gfl)x0c出现错误的原因是后面的元素内部不能允许有空格,上上一例就用反斜杠起作用51Testing软件测试网S0?o.Syjh1XKg
% set msg money\ \$3333\ \nArray\ a\[2]
#Ir Q,JX;M%E%]f0money $333351Testing软件测试网u\'H[p dg)Y(]V0N-["q
Array a[2]
aFc&h)oEW0% puts 其中\n还是换行符51Testing软件测试网Dq$nPj*B4i'}9q
其中
d-Z,b*f$o7g9m1O_0还是换行符51Testing软件测试网i%EF/[j
% puts 其中\\n还是换行符51Testing软件测试网D6] Ms7w3P/F^*_
其中\n还是换行符51Testing软件测试网MFN r]-G*E
% puts \\作用多个空格的例子
`mJ.| i${0\作用多个空格的例子
/q Mii z1o}1c*s/b0% set msg money\  Hello!51Testing软件测试网.Ge4{t!wc
wrong # args: should be "set varName ?newValue?"
]Z9Z4|%[cf0% puts 明显不能作用于多个字符51Testing软件测试网`u.DU|yV:A \
明显不能作用于多个字符51Testing软件测试网;h.RN(J.Sbo{^0A
% puts 双引号\ 花括号51Testing软件测试网%piq2GF u,e;K;^
双引号 花括号
FOh~$t5y4Q0% puts "双引号的作用:\n 对各种分隔符,除换行符\\n及\$和\[]照常处理之外不作处理。"51Testing软件测试网$D5V.m7U'@0c+h
双引号的作用:
*^c PV`S-b0 对各种分隔符,除换行符\n及$和[]照常处理之外不作处理。
u.gx#i"~0% puts "花括号的作用:\n  所有特殊字符将成普通处理,失去特殊意义。"51Testing软件测试网7IHX7Nrx tU(?
花括号的作用:51Testing软件测试网s9d[P:wi0}'S.H*Q
  所有特殊字符将成普通处理,失去特殊意义。51Testing软件测试网,l;]f%Fu@yB
% set x 100 ; set y "{$x ddd"
_n:PB,u \R0R+nb0{100 ddd51Testing软件测试网H`.gA SV
% set x 100 ; set y {/n$x [expr $x + 100]}; puts y
L[,z%K B*Oiw0y51Testing软件测试网!Q"}tQWS+N#e'?K
% set x 100 ; set y {/n$x [expr $x + 100]}; puts $y
^|9V:Nu0/n$x [expr $x + 100]
` K nU ln5p0% puts 注释符\# :作用于一整行。注意的是\#要放在第一个字符位置。51Testing软件测试网Gb1qO G;i*_9q
can not find channel named "注释符#"
s u DFG)P f,H1U0% puts 注释符\#:作用于一整行。注意的是\#要放在第一个字符位置。
/U g EP*q u9C j(Y+g({0注释符#:作用于一整行。注意的是#要放在第一个字符位置。
fft!`Y0% #这是一个注释51Testing软件测试网w)F Z.B @S,ll
% set a 100 #不是一个命令51Testing软件测试网!?)x%dhf'u#_
wrong # args: should be "set varName ?newValue?"51Testing软件测试网.o_X5D4u(l od+DLZ j9_
% set a 100;#这是一个命令
E.u_$a$fl|Tl@0100;#这是一个命令51Testing软件测试网"w9u~w7l^6?
% set a 100 ;#这是一个命令
4x hZn"@ w&w0wrong # args: should be "set varName ?newValue?"
[P8L] ^YdF~1a0% puts #############简单变量################\n##################################
&{-C*^ o-x \%Sw-X0#############简单变量################
-hjtiU?0##################################51Testing软件测试网8~K{f5y(F
% puts 变量=名字+值;名字和值都可以是任何字符。
q2sb-If'[0}0变量=名字+值;名字和值都可以是任何字符。
@Yi['C0% puts a51Testing软件测试网 C`&c8LO
a51Testing软件测试网Op levz
% puts $a
U#g O+H0p M0100;#这是一个命令
-\t;vnsQI0% set a {asdfghjkl}51Testing软件测试网k!P`l2m:a2o
asdfghjkl51Testing软件测试网L!z%\Iey
% puts $a
dB3Vb~{\%p0asdfghjkl
o.J0F.B'^:~7PJC,?G0% unset a
u S7G*Mg Q Hh0% puts $a #结果被改变51Testing软件测试网E1EkU]Wfr
can't read "a": no such variable51Testing软件测试网7{5v7} k,jPNg:v
% puts 数组,tcl中的数组跟其他语言的数组不一样。数组元素名字=数组名+数组中元素的名字。
cT%Q)B;r'Sch0数组,tcl中的数组跟其他语言的数组不一样。数组元素名字=数组名+数组中元素的名字。51Testing软件测试网oqM:H8o p+P
% set day(monday) 151Testing软件测试网wz H!PuP6f O
1
sR/hOegP0% set day(tuesday) 2
q ^q @d&{0251Testing软件测试网;B0X,J4]&Cc9U
% puts monday51Testing软件测试网 _ZR3X A4X k#r,b
monday51Testing软件测试网.f4Wlc#{s[!g`
% puts $monday51Testing软件测试网~{ P*B:j
can't read "monday": no such variable
b C#o2g9Z d0% set a monday
j?%c9FtLO!V!^y t0monday
+c5FW*RS.]d.T[0% set day(monday) 1;set b $day(monday);puts b51Testing软件测试网j/S HfJ&[1K(r?b"kQ\
b51Testing软件测试网$w~J.C] uI;C
% set day(monday) 1;set b $day(monday);puts $b51Testing软件测试网)em)O'l9Q9s T
1
+ND&i \sSHO6cH0% set c $day($a)51Testing软件测试网w ~l%cu6}(A]0B
1
}V$`dK4{0% unset a b day(monday)51Testing软件测试网N?+L9U;E
% puts $day(monday)
JXg*b5HT0can't read "day(monday)": no such element in array
)I MhWGb nk0% puts $day(tuesday)51Testing软件测试网~1i0X&U3v Y.q Rn}[V p
2
5LCqo\-t H0% unset day
%~ x0{Fj~uLP0% puts $day(tuesday)
'q [5v.D"X0can't read "day(tuesday)": no such variable
)CL?s5q)MA)S0% puts append命令把文本加到变量的后面。
sp]I5aJ0e J*N0append命令把文本加到变量的后面。
3W`ykb&r$L Xo W.~0% set txt hello!51Testing软件测试网j-G%Q|]1^5e
hello!51Testing软件测试网}!n {SfC
% append txt " wellcome to beijing!"51Testing软件测试网2MSW-kO
hello! wellcome to beijing!51Testing软件测试网7_;{K9l&z
% puts incr命令把一个变量值加到一个整数上。要求:变量原来的值和新加的都必须是整数。51Testing软件测试网"L?YhnT
incr命令把一个变量值加到一个整数上。要求:变量原来的值和新加的都必须是整数。
Wr$rl]mw@X{ u0% set b a51Testing软件测试网cX8` _ [I
a51Testing软件测试网I6W8|1T'Rc n"D
% incr b
co)f2m ?C#U+_M0expected integer but got "a"51Testing软件测试网ate^/n*D;S!O7JO
% set b 2
.vd"F-K?6\.[-n0251Testing软件测试网}%s Nz9uEcfh
% incr b 1051Testing软件测试网-f'b1Fz-|&|
1251Testing软件测试网}K+~)mQ2wC+F"e6l
% puts 接下来将学习表达式这一章51Testing软件测试网@ T~LN}/juo U
接下来将学习表达式这一章
A!~V u3o]I} iY0% puts 表达式的操作数通常是整数或实数。整数一般是十进制的,如果第一个字符是0,那么tcl就看成是八进制的,如果是0x则被看作是十六进制的。
Z:tfb2T ? g M0表达式的操作数通常是整数或实数。整数一般是十进制的,如果第一个字符是0,那么tcl就看成是八进制的,如果是0x则被看作是十六进制的。
[u%y2v)[ }/b*N.W0% puts 数学函数
(Z&UO#G P`0数学函数
-h2n pk c0% set x 251Testing软件测试网)^M#BJfNf*U
2
^PF&b;~D3o;I0Y0% expr 2*sin($x<3)
N]Xd%EYS(D01.68294196962
TP9~ ?)B(zMn0% expr 1+2*3-$x
'TBwlWV3oX,[t0551Testing软件测试网eGt2\T;s@nj1x%p:|
% puts 函数应用于表达式,表达式应用于各种控制流中。这就是知识的结构,从小到大。51Testing软件测试网@ Ehu j f
函数应用于表达式,表达式应用于各种控制流中。这就是知识的结构,从小到大。51Testing软件测试网1jQU*i1]\2o
% puts 接下来学习list这一章。51Testing软件测试网8q2k b#Y~B)i
接下来学习list这一章。
@]4r.H-cF g {0% puts list由一堆元素组成的有序集合,可以嵌套使用,每个元素是任意字符串。51Testing软件测试网 CQ U-SQU`4t
list由一堆元素组成的有序集合,可以嵌套使用,每个元素是任意字符串。
r/vh!C"J4U:S0% {}51Testing软件测试网2\ TG)v|!d-][
empty command name ""
q X)[H4f0% {a b c d}
c]4^Nf/x4tf8V0invalid command name "a b c d"
'L$Y'bl M^*z!x*J7Q0% list {a b c d}
1]}-Y*zMl;dK0Y0{a b c d}
Yy*m.v'~"D0% set lista [list a b c d]
m9|"s,ns~:o%`0a b c d
4HJ{&N3q fk0% set listb [list 1 2 {3 4}]
8ggL_,B @)x01 2 {3 4}
*?k)z ?,z$N$e0% concat lista listb
6rbB4z7aU6hw cMl0lista listb
8V6Z Y&fW-o%FU Xp0% concat $lista $listb51Testing软件测试网7g![3bm ]X
a b c d 1 2 {3 4}
%tfrm"b5]7ifE0% set listc [concat $lista $listb]
/ubY"cr-dT S:v:` [0a b c d 1 2 {3 4}51Testing软件测试网mxU4pZZk
% set one [lindex listc index]51Testing软件测试网5V6n!z0e3i+hA%M7d
bad index "index": must be integer or end?-integer?51Testing软件测试网%D9eK }$O*Z {
% set one [lindex listc 4]51Testing软件测试网/j|4X*ck8?6cU'L3H
% set one [lindex listc 4];puts one
NGh k3_.D gCe!h0one51Testing软件测试网4K)Xpuq~W7p8}
% set one [lindex listc 4];puts $one

#h%O K&f,y6T7q051Testing软件测试网Kt4P8L,`8I

% lindex listc 351Testing软件测试网8] lJq+N T0a+s
% puts listc
.wg JN w0listc51Testing软件测试网&E @.Zu3kMg!j3@Ai
% puts $listc51Testing软件测试网 ~w)^)ZC:^B3E
a b c d 1 2 {3 4}
C],Z[ UD@0% puts $listc 3
J@^mK0can not find channel named "a b c d 1 2 {3 4}"51Testing软件测试网 \Y!p6s!Lo
% lindex $listc 351Testing软件测试网;WK!J)D4Kc*~
d
M^ A m8Q+I(c+nB#n0% llength $listc
c2wVF*tf*v-\L07
4ebW g/g m%n0% lreplace $listc 1 3 one three51Testing软件测试网y,_ScI fq6y!{
a one three 1 2 {3 4}
8\dtl?_A0% lreplace $listc 1 3 one two three
2xP#?#s_ FCMqG0a one two three 1 2 {3 4}
&Cd/nM1Uzi$T0% puts $lista51Testing软件测试网#i(o[yQ`#m al
a b c d
P YZX#cB]0% lrange $lista 1 end
N;Ze IQJ0b c d
}[7KP$i0% puts $lista
y*e4UcM x0a b c d51Testing软件测试网MZj.c/W9I G~
% set txt Hello!;lappend $txt wellcome
XV:L P2i,_N]B0wellcome
IH.Pk t~8@ Ed#e0% puts $txt51Testing软件测试网o]2uu3}
Hello!51Testing软件测试网 D*B9z.R"S[&Z
% lappend test 1 2 351Testing软件测试网f w(U?.Qb)`~uw
1 2 3
j0Q C%n0V.?7[/w0% puts test
(d"k Y#Bc L0test
&k#F_d:r0% puts $test51Testing软件测试网:d dRJ\7{ M
1 2 351Testing软件测试网 [F#@e&L)I/aiS
% lappend $txt 1 2 351Testing软件测试网R%Z[@L;Y+NF
wellcome 1 2 3
2T:g}(}2x0% set txt Hello!;lappend $txt wellcome51Testing软件测试网AA.{2l*[$qVv R
wellcome 1 2 3 wellcome
$oTVL?Ql,P0% puts $txt51Testing软件测试网E Q[C(d
Hello!
!dD(a$?k0sY0% set newtxt [lappend $txt wellcome]
t6L7A%j i0wellcome 1 2 3 wellcome wellcome
+d Hn$z y9RK%{(g0% pust newtxt
b+FH+Z0}$x2G[0invalid command name "pust"51Testing软件测试网:W-Ymz:g
% puts $newtxt
0y:d1N%a)tH*^0wellcome 1 2 3 wellcome wellcome51Testing软件测试网4o V,}y8^ z{%sGf8|3i
% lsearch $txt 251Testing软件测试网U.C^0k a @9UB vX
-151Testing软件测试网4c%jp0kcJcCQ2F/X
% lsearch $newtxt 2
l\S0~c i)mX(iV02
U8r Q9g^7C/PVk0% lsearch -exact $newtxt 2
c `~v D]8Mv02
X8amK4p/R0j0% lsearch -exact $newtxt well
-S c)D6K4Ucmt3r0-151Testing软件测试网"~K'@R)dB \HkW
% lsearch -exact $newtxt wellcome
,Sg'F t*Z~8F4Y00
!upq_(P@ h0% puts $listc51Testing软件测试网vCI:CB7k ^
a b c d 1 2 {3 4}
YRw*K uweg0% lsort -asscii $listc
$W"w1^]D0bad option "-asscii": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique51Testing软件测试网3s&K)HM`6_
% lsort -ascii $listc51Testing软件测试网1u%R FU%q X N
1 2 {3 4} a b c d51Testing软件测试网cyIF"\&E{ U
% lsort -decrieasing $listc
@ c"N,ora4H6W7P0bad option "-decrieasing": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique51Testing软件测试网.~R [Yaq:I_(H,E
% lsort -decreasing $listc
&P9BQ$gbZNa0d c b a {3 4} 2 1
U,r/BnK$M{I0% lsort -ascii $listc #ASCII排序方式51Testing软件测试网N)[w;~']0?
bad option "a b c d 1 2 {3 4}": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique
[GgBNb9Mw }'U0% lsort -ascii $listc
S,H#I h0gbUE*T ac01 2 {3 4} a b c d
hHO|1rC"ggG0e4G8j.v\0% lsort -integer $listc51Testing软件测试网 |6~-g |*xhftUV l
expected integer but got "a"51Testing软件测试网I0\)Q9?9[y
% puts lista
i5oX KFy5F0lista51Testing软件测试网/W:poZYI
% puts $lista
BP VGg3{3YZ)V0a b c d51Testing软件测试网^R@.|o
% puts $txt
4t*nd7}X\E0Hello!51Testing软件测试网,|9_4];\*P}$ddH
% split $txt51Testing软件测试网V jA-t]
Hello!51Testing软件测试网*ZqZ[f1Jm
% split string $txt51Testing软件测试网Y:O@!gj4~ {D
string
F!E'`D u4p Z!oR_d0% split $txt {}51Testing软件测试网6L;X'k#R0C H9^+W&\x
H e l l o !
ri |:LXR:Sf;H0% split $txt l
cs2[dHoy0He {} o!51Testing软件测试网3rI UM S6n`
% split $txt e
0YpS'LR c8G b0H llo!
'k7E+T } S"f~0% split "how are you" {}51Testing软件测试网$_N hG!mi
h o w { } a r e { } y o u51Testing软件测试网5v Rc9G!X
% join "how are you" {}
vys[ I3Fw2Hgs&o0howareyou51Testing软件测试网fk0Lx"Pt8c
% join "how $txt {}51Testing软件测试网*a}{4k!eMz
>51Testing软件测试网Tc4T!Bc7A&e }Ut
> "51Testing软件测试网7x x W {p!a$FM+i
how Hello!51Testing软件测试网1i,ks5s I+RoS)lV
% join $txt {}51Testing软件测试网^6Lj6F+`c;\)y%m'Ds
Hello!
{F*~8ok:`N*D0% split $txt {}51Testing软件测试网2B }-WCi%@
H e l l o !
g }2rklh+WmC0% join $txt {}51Testing软件测试网 hxN Y vIn
Hello!51Testing软件测试网Fkkp!Fh$Tr:f
% jion {how are you} .
Rl [N.O0invalid command name "jion"
UK v&BPw ` om0% join {how are you} .51Testing软件测试网M&Yk:A,SD
how.are.you51Testing软件测试网uhY k kr
% puts 接下来学习第七章——过程
,Y!C[t5E[0接下来学习第七章——过程51Testing软件测试网Q [btk*}
% set x 10;set y 20;proc add {x y } { expr $x + $y}
%y:?o8C-o1pe(|6G7M.g9G(S0% add 10 20
"i Wh2U{#T9~030
U Jbg+S2Z6X6d0% set x 10;set y 20;set z [proc add {x y } { expr $x + $y;}];puts z;
]4p$Z zp0xI:ey~ ~k0z
(v6~&Unv(S)?1}0% set x 10;set y 20;set z [proc add {x y } { expr $x + $y;}];puts $z;

&KW o$]C0

1wa\L2j:w*?(a4}0% set x 10;set y 20;set z [proc add {x y } { expr $x + $y}];puts $z;

}'A&`4eG&A3B051Testing软件测试网*[6p$u!^w/nE v

% proc add {x y } { expr $x + $y}51Testing软件测试网0dDhB wGdZ O,y
% add 40 60051Testing软件测试网;u*`"Vw#?
64051Testing软件测试网0p3P;l7Qe t~7Z


TAG: Tcl TCL

snowlocusfly的个人空间 引用 删除 snowlocusfly   /   2010-07-12 15:15:42
5
传递,是动作、过程、理念、延续…… 引用 删除 gdou_wzy   /   2009-09-04 18:20:28
希望大家给予补充。

    个人认为软件出现的BUG首先第一个责任一般都是测试用例的问题。其次是测试方法(本身的知识)。
最后则是态度问题。如果测试用例不完善,不论测试人员自身的水平多好,态度多好,都必然会出问题,
除非测试人员对测试用例进行了很好的完善。而如果测试用例是完好的,如果自身知识点比较贫乏也是很容易出问题的。
例如说测试用例注明测试中请注意存储数据是否正确,但是我们自身都完全不会SQL那么自然就容易出问题了。
至于态度问题其实是大家最常出错的。

    测试中常遗漏的点:

    逻辑思考方面:

    1、 对条件的分析(单元测试中常称为代码覆盖率也是同样的问题)

    例如说对if{}else{};case 1 {};case 2{};……这些条件的判断在测试用例中的体现

    2、 临界/并发问题

    3、 无效指针(野指针问题)(WEB中的无效果用户也可以作为同类问题)

    4、 新增数据/旧数据维护(从无到有是最容易遗漏的,新旧数据的权限问题也是很容易漏看的)

    5、 多次执行后的情况(一次执行和多次执行后的区别,回归测试的重要性)

    6、 存储范围(一个是程序的存储范围控制,另外是前台与后台的一致性控制,再则是在存储出错后的异常出错,
例如使用了一个内存地址来存放数据,只分配了1024B,而我选择的内容大于1024B的时候会如何?)

    7、 组合考虑(大家常常只看到了表面的紧密关联的组合考虑,而常忘记了比较深的关联)

    8、 随机问题(这是最容易被忽视的,但是也常常是引起重大问题的地方)

    软件的功能测试方面:

    1、 安装部分

    2、 配置文件

    3、 输入框的以及输入法(ctrl+c/ctrl+v)

    4、 界面布局问题

    5、 用户管理缺陷(特别是对权限有分级的情况下,我们测试常常都是使用了拥有一切权限的用户,也就是所谓的admin)

    6、 常识缺陷(常规世界中的真实情况的考虑,例如说文件名)

    如果各位大虾路过,见到有缺失的,麻烦留个脚印,让小滴我补充补充。
传递,是动作、过程、理念、延续…… 引用 删除 gdou_wzy   /   2009-03-14 18:10:12
缺乏美观
 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 27174
  • 日志数: 21
  • 建立时间: 2008-12-23
  • 更新时间: 2009-03-12

RSS订阅

Open Toolbar