系统学习TCL脚本入门教程Word文档下载推荐.docx
- 文档编号:22754328
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:100
- 大小:316.23KB
系统学习TCL脚本入门教程Word文档下载推荐.docx
《系统学习TCL脚本入门教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《系统学习TCL脚本入门教程Word文档下载推荐.docx(100页珍藏版)》请在冰豆网上搜索。
-Withasemicoloninsidethequotes"
#正确,分号在双引号内,作为字符串一部分
2.2第2课:
给变量赋值
1.set:
给变量赋值,格式为setvarvalue
#给变量X赋一个字符串
setX"
Thisisastring"
#给变量Y赋一个数字
setY
#显示X和Y的内容
puts$X
puts$Y
#打印一个分隔串
..............................."
#打印在一行中,推荐使用双引号
setlabel"
ThevalueinYis:
"
$label$Y"
puts$label$Y
2.3第3课:
命令的赋值与置换一
1.TCL中命令的赋值分为置换和赋值两个步骤
2.续行符为\
3.转义符同为\
4.特殊字符列表:
序号
字符
输出
十六进制
1
\a
响铃
\x07
2
\b
回车
\x08
3
\f
清屏
\x0c
4
\n
换行
\x0a
5
\r
\x0d
6
\t
制表符
\x09
7
\v
垂直制表符(VerticalTab)
\x0b
8
\ddd
八进制值
d=0-7
9
\xhh
十六进制值
h=0-9,A-F,a-f
#Showhowa\affectsthe$
setZ"
Albany"
setZ_LABEL"
TheCapitolofNewYorkis:
$Z_LABEL$Z"
;
#显示Albany
$Z_LABEL\$Z"
#显示$Z,被\转义
#Thenextlineneedsabackslashtoescapethe'
$'
\nBenFranklinisonthe\$bill"
#\n换行;
$100前的\必须有,否则会将100作为一个变量,提示出错
seta
Washingtonisnotonthe$abill"
#Thisisnotwhatyouwant
Lincolnisnotonthe$$abill"
#显示$100,说明是后结合的,先置换了$a,此处严格的写应该写为\$$a
Hamiltonisnotonthe\$abill"
#显示$a
BenFranklinisonthe\$$abill"
#显示$100,说明是后结合的,先置换了$a
\n.................examplesofescapestrings"
Tab\tTab\tTab"
Thisstringprintsout\nontwolines"
#行中\没有打印出来,如果要打印出来,需要写成\\
Thisstringcomesout\
onasingleline"
#当一行太长,不便于阅读,使用\做续行符
2.4第4课:
命令的赋值与置换二
1.最外层是{}则不会进行置换操作,但其中的续行符仍然有效
\n.................examplesofdifferencesbetween\"
and\{"
#and前的双引号前必须有\进行转义,否则这个双引号回和前面的双引号结合,导致成了“xxx”and\{“的结构,会提示出错
#显示TheCapitolofNewYorkis:
Albany
puts{$Z_LABEL$Z};
#显示$Z_LABEL$Z,没有进行置换,{}中不会置换
\n.......examplesofdifferencesinnesting\{and\"
$Z_LABEL{$Z}"
;
#最外层是双引号,所以进行了置换
puts{Whosaid,"
Whatthiscountryneedsisagood$Zcigar!
"
};
#最外层是花括号,所以没有进行置换
puts{Therearenosubstitutionsdonewithinbraces\n\r\x0a\f\v};
#
puts{But,theescapednewlineattheendofa\
stringisstillevaluatedasaspace};
#续行符仍然生效
2.5第5课:
命令的赋值与置换三
1.[]可以传递其中的命令结果,注意不能被{}包含;
2.双引号包含的[]中的命令可以正常执行,命令结果也可以传出;
3.{}包含的[]中的命令不会执行,更不会有命令结果传出来。
setx"
abc"
Asimplesubstitution:
$x\n"
#显示abc
sety[setx"
def"
];
#先执行[]中的命令,将”def”赋值给x,然后将该命令的结果赋值给y
Rememberthatsetreturnsthenewvalueofthevariable:
X:
$xY:
$y\n"
#显示x和y都是def
setz{[setx"
Thisisastringwithinquoteswithinbraces"
]};
#由于在{}中,所以并没有执行对x的赋值,只是将{}赋值给z
Notethecurlybraces:
$z\n"
seta"
[setx{Thisisastringwithinbraceswithinquotes}]"
#执行了对x的赋值操作,并将值传出来赋给了a
Seehowthesetisexecuted:
$a"
\$xis:
setb"
\[sety{Thisisastringwithinbraceswithinquotes}]"
Notethe\\escapesthebracket:
\n\$bis:
$b"
\$yis:
$y"
2.6第6课:
算数运算
1.操作符
操作符
解释
-+~!
-:
负号+:
正号~:
位操作非!
:
逻辑非
*/%
*:
乘/:
除%:
取模
+-
+:
加-:
减
<
>
>
循环左移>
循环右移
&
按位与
^
^:
按位异或
|
|:
按位或
逻辑与
||
||:
逻辑或
10
xy:
z
if-then-else
2.数学函数
函数
acos
11
log10
cos
12
tan
hypot
13
atan2
sinh
14
floor
asin
15
pow
cosh
16
tanh
log
17
ceil
sqrt
18
fmod
atan
19
sin
exp
setX100;
setY256;
#行末是否有分号都可以
setZ[expr"
$Y+$X"
#变量是否被双引号包含都可以,不过建议使用双引号
setZ[expr$Y+$X]
$Yplus$Xis"
Thesquarerootof$Yis[exprsqrt($Y)]\n"
Becauseoftheprecedencerules\"
5+-3*4\"
is:
[expr-3*4+5]"
Becauseoftheparentheses\"
(5+-3)*4\"
[expr(5+-3)*4]"
\n.................moreexamplesofdifferencesbetween\"
puts{$Z_LABEL[expr$Y+$X]};
#外层是花括号不会进行置换
$Z_LABEL{[expr$Y+$X]}"
#外层是双引号会进行置换
Thecommandtoaddtwonumbersis:
\[expr\$a+\$b]"
2.7第7课:
文本比较-SWITCH应用
1.switch的分支中的命令使用花括号包含,但是并不会影响花括号中的命令执行,切记,这是switch的格式;
2.如果不想分支条件进行置换,需要在外加上花括号,不会影响分支中的命令执行。
#Setthevariableswe'
llbecomparing
ONE"
sety1;
setz"
#Thisislegal
switch$x"
putsONE=1"
TWO"
putsTWO=2"
default"
putsNO_MATCH"
#这种写法合法,但是阅读不便
switch$x\
"
\
#这种写法好看一些,推荐
#下面这种写法$z被置换,走入$z的条件分支,表面上看条件分支中的命令在花括号内,这只是switch的一种格式,所以其中的命令仍然被执行了。
$z"
{sety1[expr$y+1];
MATCH\$z.$y+$zis$y1"
}\
MATCHONE.$y+oneis$y1"
}\
{sety1[expr$y+2];
MATCHTWO.$y+twois$y1"
THREE"
{sety1[expr$y+3];
MATCHTHREE.$y+threeis$y1"
{puts"
$xdoesnotmatchanyofthesechoices"
}
#Thisformofthecommanddisablesvariablesubstitutioninthepattern
#下面为了不置换$z,在外层加上了花括号,于是走入了ONE分支,而分支中的命令仍然被执行了
switch$x{
}
$xisNOTAMATCH"
2.8第8课:
数值比较-IF应用
1.条件式结果
FALSE
TRUE
数值
非零
yes/no
no
yes
true/false
false
true
2.置换变量的方法,setyx;
puts$$y,因为是后结合并且是一次置换,所以打出来的是$x,不是$x的值;
但是在if的条件式中进行了二次置换,$$y被置换成了$x的值
3.注意:
新行中需要写为}else{,不能将}写到前一行的末尾,也不能省略}后面的那个空格,后面的{也需要写在当行,并且前面需要一个空格。
setx1;
if{$x==2}{puts"
$xis2"
}else{puts"
$xisnot2"
#判断是否相等使用==
if{$x!
=1}{;
#判断是否不等使用!
=
$xis!
=1"
}else{
$xis1"
if$x==1{puts"
GOT1"
setyx;
if"
$$y!
{;
#在if条件式中$$y进行了二次置换
$$yis!
#在puts命令中,只进行了一次置换
$$yis1"
2.9第9课:
WHILE循环
x讲解:
1.while后面的条件表达式是放在花括号中的;
放在双引号中会只执行一次置换
while{$x<
5}{puts"
xis$x"
setx[expr$x+1]}
exitedfirstloopwithXequalto$x\n"
setx0;
while"
$x<
5"
#只执行一次置换1<
5,于是该条件永远为真
setx[expr$x+1]
if{$x>
6}break;
#如果去掉这句就成了死循环
if"
$x>
3"
continue;
#这句使4打不出来
exitedsecondloopwithXequalto$x\n"
2.10第10课:
FOR循环和incr
1.incrx和setx[expr$x+1]达到一样的效果,向上加一
x
for{puts"
Start"
seti0}{$i<
2}{incri;
Iafterincr:
$i"
}{;
#第一部分只执行一次,后面两部分每次循环都会执行
Iinsidefirstloop:
seti3}{$i<
#不会执行循环体中的命令
Iinsidesecondloop:
seti0;
while{$i<
2}{
incri;
2.11第11课:
过程PROC
1.格式:
procnameargsbody
2.调用方法中参数可以用花括号或者双引号包含,也可以不包含
3.在puts等命令中需要置换的话,需要使用方括号
procsum{arg1arg2}{
setx[expr$arg1+$arg2];
return$x;
#过程返回值
Thesumof2+3is:
[sum23]\n\n"
#调用过程
#puts"
[sum{23}]\n\n"
#出错,提示找不到第二个参数,置换过程中第一个参数是{23},所以找不到第二个参数
sum(23)\n\n"
#输出sum(23),因为没有方括号,根本没有进行置换
sum{23}\n\n"
#输出sum{23},因为没有方括号,根本没有进行置换
sum23;
#正确
sum{2}{3};
sum"
2"
3"
procfor{abc}{
Theforcommandhasbeenreplacedbyaputs"
Theargumentswere:
$a\n$b\n$c\n"
for{seti1}{$i<
10}{incri}
2.12第12课:
过程PROC的参数定义
1.过程的参数赋缺省值:
procname{arg1{arg2value}}
2.过程的不确定个数的参数定义:
procname{arg1args}
procexample{first{second"
}args}{;
#参数定义:
赋缺省值和不确定个数参数定义
if{$second=="
}{
Thereisonlyoneargumentanditis:
$first"
return1;
if{$args=="
Therearetwoarguments-$firstand$second"
return2;
Therearemanyarguments-$firstand$secondand$args"
return"
many"
setcount1[exampleONE]
setcount2[exampleONETWO]
setcount3[exampleONETWOTHREE]
setcount4[exampleONETWOTHREEFOUR]
Theexamplewascalledwith$count1,$count2,$count3,and$count4Arguments"
2.13第13课:
变量的作用域
1.全局变量定义:
globalvar1
2.局部变量:
upvarxy等同于upvar1xy,作用有两个:
一是将上一层的x的值赋给y;
二是将上一层的x的地址赋给y,于是修改y等于修改x。
1代表作用范围,也可为2,3等,不能为0
procSetPositive{variablevalue}{;
#此处variable只是一个参数名,可以修改为其他的来代替变量
upvar$variablemyvar;
#此处也可写为upvar1$variablemyvar
if{$value<
0}{setmyvar[expr-$value];
}else{setmyvar$value;
return$myvar;
SetPositivex5;
SetPositivey-5;
X:
proctwo{y}{
upvar1$yz;
#此处绑定了two中的z和one中的y
upvar2xa;
#此处绑定了主程序中的x和two中的a
two:
Z:
$zA:
setz1;
;
#Setz,thepassedvariableto1;
seta2;
#Setx,twolayersupto2;
#Afirstlevelproc-Thiswillbecalledbytheglobalspacecode.
procone{y}{
upvar$yz;
#Thistiesthecallingvaluetovariablez
one:
$z"
#Outputthatvalue,tocheckitis5
twoz;
#callproctwo,whichwillchangethevalue
oney;
#Callone,andoutputX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 学习 TCL 脚本 入门教程