1.
注释符号是#或者 ;# ,在命令后注释用 ;#
,在行开头两者均可;
2. puts
:输出文本,多个单词如被空格或TAB分隔需要使用“”或{}
括起来;
3.
多个命令写在一行使用 ; 间隔。
例子:002_puts.tcl
# ok ;#
正确
;# ok ;#
正确
; # ok ;#
正确, 分号和井号之间可以有空格
puts Hello ;#
正确
puts Hello,World ;#
正确,多个单词之间不是被空格或者TAB分隔开
puts Hello World ;#
这行命令运行出错,被空格分隔
puts "Hello, World - In quotes" ;#
注释
puts {Hello, World - In Braces} #
这行命令运行出错,必须使用 ;# 作为注释符号
puts "This is line 1"; puts "this is line 2" ;#
正确,用分号分隔两个命令
puts "Hello, World; - With a semicolon inside the quotes" ;#正确,分号在双引号内,作为字符串一部分
1.
set:给变量赋值,格式为 set var value
例子:003_var.tcl
;# 给变量X赋一个字符串
set X "This is a string"
;# 给变量Y赋一个数字
set Y 1.24
;# 显示X和Y的内容
puts $X
puts $Y
;# 打印一个分隔串
puts "..............................."
;# 打印在一行中,推荐使用双引号
set label "The value in Y is: "
puts "$label $Y"
puts $label$Y
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
|
垂直制表符(Vertical Tab)
|
\x0b
|
8
|
\ddd
|
八进制值
|
d=0-7
|
9
|
\xhh
|
十六进制值
|
h=0-9,A-F,a-f
|
例子:004_eval.tcl
;# Show how a \ affects the $
set Z "Albany"
set Z_LABEL "The Capitol of New York is: "
puts "$Z_LABEL $Z" ;#显示Albany
puts "$Z_LABEL \$Z" ;#显示$Z,被 \
转义
;# The next line needs a backslash to escape the '$'
puts "\nBen Franklin is on the \$100.00 bill" ;# \n换行; $100前的 \
必须有,否则会将100作为一个变量,提示出错
set a 100.00
puts "Washington is not on the $a bill" ;# This is not what you want
puts "Lincoln is not on the $$a bill" ;#
显示$100,说明是后结合的,先置换了$a,此处严格的写应该写为 \$$a
puts "Hamilton is not on the \$a bill" ;#
显示$a
puts "Ben Franklin is on the \$$a bill" ;#
显示$100,说明是后结合的,先置换了$a
puts "\n................. examples of escape strings"
puts "Tab\tTab\tTab"
puts "This string prints out \non two lines" ;#
行中 \ 没有打印出来,如果要打印出来,需要写成 \\
puts "This string comes out\
on a single line" ;#
当一行太长,不便于阅读,使用 \ 做续行符
1.最外层是 {}
则不会进行置换操作,但其中的续行符仍然有效
例子:005_escape.tcl
set Z "Albany"
set Z_LABEL "The Capitol of New York is: "
puts "\n................. examples of differences between \" and \{" ;#and前的双引号前必须有\
进行转义,否则这个双引号回和前面的双引号结合,
导致成了 “xxx” and \{“ 的结构,会提示出错
puts "$Z_LABEL $Z" ;#
显示The Capitol of New York is: Albany
puts {$Z_LABEL $Z} ;#
显示 $Z_LABEL $Z,没有进行置换,{}中不会置换
puts "\n....... examples of differences in nesting \{ and \" "
puts "$Z_LABEL {$Z}" ;#
最外层是双引号,所以进行了置换
puts {Who said, "What this country needs is a good $Z cigar!"?} ;#最外层是花括号,所以没有进行置换
puts "\n................. examples of escape strings"
puts {There are no substitutions done within braces \n \r \x0a \f \v} ;#
puts {But, the escaped newline at the end of a\
string is still evaluated as a space} ;#续行符仍然生效
1.
[ ] 可以传递其中的命令结果,注意不能被 {}
包含;
2.
双引号包含的 [ ] 中的命令可以正常执行,命令结果也可以传出;
3.
{} 包含的 [ ]
中的命令不会执行,更不会有命令结果传出来。
例子:006_escape.tcl
set x "abc"
puts "A simple substitution: $x\n" ;#显示abc
set y [set x "def"] ;#先执行[]中的命令,将”def”赋值给x,然后将该命令的结果赋值给y
puts "Remember that set returns the new value of the variable: X: $x Y: $y\n" ;#显示x和y都是def
set z {[set x "This is a string within quotes within braces"]} ;#由于在{}中,所以并没有执行对x的赋值,只是将{}赋值给z
puts "Note the curly braces: $z\n"
set a "[set x {This is a string within braces within quotes}]" ;#执行了对x的赋值操作,并将值传出来赋给了a
puts "See how the set is executed: $a"
puts "\$x is: $x\n"
set b "\[set y {This is a string within braces within quotes}]"
puts "Note the \\ escapes the bracket:\n \$b is: $b"
puts "\$y is: $y"
1.
操作符
序号
|
操作符
|
解释
|
1
|
- + ~ !
|
- : 负号 + :
正号 ~ : 位操作非 ! :
逻辑非
|
2
|
* / %
|
* : 乘 / :
除 % : 取模
|
3
|
+ -
|
+ : 加 - :
减
|
4
|
<< >>
|
<< : 循环左移 >> :
循环右移
|
5
|
&
|
& : 按位与
|
6
|
^
|
^ : 按位异或
|
7
|
|
|
| : 按位或
|
8
|
&&
|
&& : 逻辑与
|
9
|
||
|
|| : 逻辑或
|
10
|
x?y:z
|
if-then-else
|
2.
数学函数
序号
|
函数
|
序号
|
函数
|
1
|
acos
|
11
|
log10
|
2
|
cos
|
12
|
tan
|
3
|
hypot
|
13
|
atan2
|
4
|
sinh
|
14
|
floor
|
5
|
asin
|
15
|
pow
|
6
|
cosh
|
16
|
tanh
|
7
|
log
|
17
|
ceil
|
8
|
sqrt
|
18
|
fmod
|
9
|
atan
|
19
|
sin
|
10
|
exp
|
|
|
例子:007_math.tcl
set X 100;
set Y 256 ;#
行末是否有分号都可以
set Z [expr "$Y + $X"] ;#
变量是否被双引号包含都可以,不过建议使用双引号
set Z [expr $Y + $X]
set Z_LABEL "$Y plus $X is "
puts "$Z_LABEL $Z"
puts "The square root of $Y is [expr sqrt($Y)]\n"
puts "Because of the precedence rules \"5 + -3 * 4\" is: [expr -3 * 4 + 5]"
puts "Because of the parentheses \"(5 + -3) * 4\" is: [expr (5 + -3) * 4]"
puts "\n................. more examples of differences between \" and \{"
puts {$Z_LABEL [expr $Y + $X]} ;#外层是花括号不会进行置换
puts "$Z_LABEL {[expr $Y + $X]}" ;#
外层是双引号会进行置换
puts "The command to add two numbers is: \[expr \$a + \$b]"
1.
switch的分支中的命令使用花括号包含,但是并不会影响花括号中的命令执行,切记,这是switch的格式;
2.
如果不想分支条件进行置换,需要在外加上花括号,不会影响分支中的命令执行。
例子:008_switch.tcl
;# Set the variables we'll be comparing
set x "ONE";
set y 1;
set z "ONE";
;# This is legal
switch $x "ONE" "puts ONE=1" "TWO" "puts TWO=2" "default" "puts NO_MATCH" ;#这种写法合法,但是阅读不便
switch $x \
"ONE" "puts ONE=1" \
"TWO" "puts TWO=2" \
"default" "puts NO_MATCH" ;#这种写法好看一些,推荐
;#下面这种写法$z被置换,走入$z的条件分支,表面上看条件分支中的命令在花括号内,这只是switch的一种格式,所以其中的命令仍然被执行了。
switch $x \
"$z" {set y1 [expr $y+1]; puts "MATCH \$z. $y + $z is $y1" } \
"ONE" {set y1 [expr $y+1]; puts "MATCH ONE. $y + one is $y1"} \
"TWO" {set y1 [expr $y+2]; puts "MATCH TWO. $y + two is $y1" } \
"THREE" {set y1 [expr $y+3]; puts "MATCH THREE. $y + three is $y1" } \
"default" {puts "$x does not match any of these choices"}
;# This form of the command disables variable substitution in the pattern
;#下面为了不置换$z,在外层加上了花括号,于是走入了ONE分支,而分支中的命令仍然被执行了
switch $x {
"$z" {set y1 [expr $y+1]; puts "MATCH \$z. $y + $z is $y1" }
"ONE" {set y1 [expr $y+1]; puts "MATCH ONE. $y + one is $y1"}
"TWO" {set y1 [expr $y+2]; puts "MATCH TWO. $y + two is $y1"}
"THREE" {set y1 [expr $y+3]; puts "MATCH THREE. $y + three is $y1"}
"default" {puts "$x is NOT A MATCH"}
}
1.
条件式结果
|
FALSE
|
TRUE
|
数值
|
0
|
非零
|
yes / no
|
no
|
yes
|
true / false
|
false
|
true
|
2.置换变量的方法,set y x ; puts $$y
,因为是后结合并且是一次置换,所以打出来的是 $x
,不是$x的值;但是在if的条件式中进行了二次置换, $$y
被置换成了 $x 的值
3.注意:新行中需要写为 } else {
,不能将 } 写到前一行的末尾,也不能省略 }
后面的那个空格,后面的 { 也需要写在当行,并且前面需要一个空格。
例子:009_if.tcl
set x 1;
if {$x == 2} {puts "$x is 2"} else {puts "$x is not 2"} ;#判断是否相等使用 ==
if {$x != 1} { ;#判断是否不等使用 !=
puts "$x is != 1"
} else {
puts "$x is 1"
}
if $x==1 {puts "GOT 1"}
set y x;
if "$$y != 1" { ;#在if条件式中$$y进行了二次置换
puts "$$y is != 1" ;#在puts命令中,只进行了一次置换
} else {
puts "$$y is 1"
}
x
1.while后面的条件表达式是放在花括号中的;放在双引号中会只执行一次置换
例子:010_while.tcl
set x 1;
while {$x < 5} {puts "x is $x"; set x [expr $x + 1]}
puts "exited first loop with X equal to $x\n"
set x 0;
while "$x < 5" { ;#只执行一次置换1<5,于是该条件永远为真
set x [expr $x + 1]
if {$x >6} break; ;#如果去掉这句就成了死循环
if "$x > 3" continue; ;#这句使4
打不出来
puts "x is $x";
}
puts "exited second loop with X equal to $x\n"
1.incr x
和 set x [expr $x + 1] 达到一样的效果,向上加一
x
例子:011_for.tcl
分享到:
相关推荐
### TCL脚本语言详细教程 #### 一、TCL语法概览 TCL(Tool Command Language)是一种轻量级的脚本语言,以其简洁高效的特点广泛应用于自动化测试、配置管理等多个领域。对于初学者而言,了解TCL的基本语法是至关...
以下是对TCL脚本语言编程和TCL语言教程的一些关键知识点的详细说明: 1. **基本语法**:TCL的语法简洁明了,以空格和换行符作为语句分隔。命令通常由关键字和参数组成,不区分大小写。例如,`puts`命令用于打印输出...
本文将根据提供的《TCL中文教程》的部分内容,总结并详细介绍TCL脚本语言的关键知识点。 #### 二、TCL语法 TCL的语法简洁而强大,主要包括脚本结构、单词和命令等组成部分。 ##### 2.1 脚本、命令和单词符号 - **...
TCL(Tool Command Language)是一种解释型的、动态类型的脚本语言,由John Ousterhout教授在1988年开发。它以其简洁、易学的特点被广泛应用于各种领域,包括系统管理、网络编程、GUI开发等。下面将详细介绍TCL脚本...
TCL(Tool Command Language)作为一门功能强大且灵活的脚本语言,在众多领域有着广泛应用。这本教程以其独特的魅力,成为学习 TCL 语言的不二之选。 教程内容全面且系统,从 TCL 语言的基础语法讲起,细致入微地...
TCL(Tool Command Language)是一种强大的脚本语言,由John Ousterhout在1988年开发。它被设计为一种简洁、易学、易用的语言,主要用于系统管理、网络编程、GUI(图形用户界面)开发以及嵌入式系统的控制。TCL以其...
### TCL脚本语言培训教程(中文版)知识点详解 #### 1. 引言 - **TCL**(Tool Command Language)是一种轻量级的解释型脚本语言,以其简洁性和易用性著称。 - **适用场景**:主要用于自动化测试、系统管理任务以及...
TCL是一种轻量级的脚本语言,广泛用于自动化任务、系统管理以及嵌入式系统。这份TCL教程中文版提供了全面的学习资源,涵盖了从基础语法到高级特性的方方面面。 ### TCL语法 TCL的语法相对简洁,由脚本、命令和单词...
**TCL脚本语言基本教程** TCL(Tool Command Language),一种强大且灵活的脚本语言,由John Ousterhout在20世纪80年代末创建,最初用于编写工具命令。TCL以其简单易学、语法简洁以及与其他语言的无缝集成而闻名,...
TCL脚本语言入门教程 TCL(Tool Command Language)是一种高级的脚本语言,广泛应用于自动化测试、网络管理、数据库管理等领域。下面是TCL脚本语言入门教程的详细知识点总结。 一、TCL语法 TCL语法是TCL语言的...
它最初设计用于快速开发简单的命令行工具,但随着其发展,TCL已经成为一种功能全面的脚本语言,能够处理复杂的任务,甚至可以与C++或Java等编译型语言进行集成。 运行TCL脚本需要一个TCL解释器,如ActiveTCL,它可...
### TCL脚本语言编程知识点详解 #### 一、TCL基本概念 **TCL全称:** Tool Command Language,是一种轻量级的脚本语言,主要用于快速开发各种自动化任务、配置管理和GUI应用。 **特点:** - **基于字符串:** 大...
### TCL脚本语言手册知识点概览 #### 一、TCL基本知识 **1.1 什么是TCL** TCL(Tool Command Language)是一种轻量级的解释型脚本语言,设计初衷是为了方便用户快速地编写小型应用程序或脚本来解决各种问题。TCL...
Tcl(Tool Command Language,工具命令语言)是一种简单、易学、强大的脚本语言,尤其适合于快速开发和集成系统。在华为等大型科技公司中,Tcl因其灵活性和高效性,常被用于自动化测试、网络设备配置、系统管理等...
描述与标签中的重复提及“TCL脚本语言编程.pdf”,暗示了这份文档可能是关于TCL编程的详细介绍或教程,旨在帮助读者掌握TCL语言的基础知识、高级特性以及实际应用案例。由于文档的具体内容未能完全展示,我们可以...
Tcl(Tool Command Language)是一种动态类型的脚本语言,由John Ousterhout在1988年开发,主要用于编写系统管理和应用控制脚本。它以其简洁、易学和强大的字符串处理能力而闻名。Tcl_Tk是Tcl语言的一个扩展,提供了...
TCL(Tool Command Language)是一种高级的脚本语言,广泛应用于自动化、测试和开发领域。下面是TCL语言的学习指南,涵盖了TCL语言的基础知识、语法、特性和应用场景。 TCL语言基础 * TCL是一种解释型语言,支持多...
TCL,全称为Tool Command Language或Terminal Control Language,是一种解释型的脚本语言,其特点是简洁易学且功能强大。TCL的解释器是`tclsh`,它同时也是一种shell环境。由于TCL与C语言在数据类型和控制结构上有...
Tcl是一种简洁而强大的脚本语言,主要用于自动化任务、软件集成和GUI开发。Tcl/Tk教程详细地讲解了Tcl语言的语法和核心概念,同时也涵盖了面向对象编程的特性,使得学习者能够全面理解并掌握Tcl。 1. Tcl语法: ...
Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIVADO也提供了TCL命令行。最近发现TCL脚本貌似比GUI下操作VIVADO效率高一些,方便一些。 应用程序(如VIVADO)...