2.2.2 语法实践
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
赋值语法
赋值:tcl 使用“set”关键字来定义参数,不必指定变量值的类型,因为变量值的类型仅一种——字符串
样式:set varName [value]
注意:
变量名是由 数字、下划线、字符组成,数字不能开头,大小写敏感。
expect1.7> set a Hello # 设定一个变量名a
Hello
expect1.8> put $a # 使用$ 符号获取变量名的存储值
Hello
expect1.9> put "$a" # 使用 "" 方式打印变量的值
Hello
expect1.10> put {$a} # {} 有别于"" 的特点在于原字符输出
$a
expect1.11> set b $a # 变量的传递
Hello
expect1.12> puts $b
Hello
替换语法
替换(解析):
- $符号可以实现引用替换,用于引用变量名代替的参数值,但是TCL对嵌套的”$”不于理睬
- [] 方括号“[]”完成命令替换。用“[]”将一条命令括起来,命令执行完成后,返回结果
expect1.20> set b [set a 5] # 相当于 set b $a,传递赋值
5
expect1.21> puts $b
5
expect1.22> set c [expr 5 * 10 ] # expr是执行系统命令,将计算结果交给c
50
expect1.24> puts $c
50
注意事项
变量的设定
expect1.13> set var value # 设定一个普通变量名
value
expect1.14> puts $var # 获取变量名的值
value
不支持嵌套$
expect1.15> set var1 $$value # TCL不支持嵌套的$
can't read "value": no such variable
while executing
"set var1 $$value"
expect1.16> set var1 $$var # 由于$var 已经是变量,所以前面的$就无效了
$value
expect1.17> puts $var1
$value
原字符输出
expect1.18> set var2 {$var1} # {} 代表原字符输出
$var1
expect1.19> puts $var2
$var1
脚本实践
内置变量
对于tcl来说,它内部包含了大量的内置变量,可以让我们实现快速的功能操作。
常见的内置变量有:
argc 指命令行参数的个数。
argv 指包含命令行参数的列表。
argv0 是指被解释的文件或由调用脚本的名称的文件名。
env 用于表示是系统环境变量的内容,普通变量我们还是使用$即可
tcl_version 返回Tcl解释器的最新版本,注意不是expect的版本号
内置参数实践
[root@localhost ~]# cat expect_test1.expect
#!/usr/bin/expect
# 查看当前文件传递的参数数量
puts "当前文件传递的参数数量: $argc"
# 查看当前文件传递的参数
puts "当前文件传递的参数: $argv"
# 查看当前文件名称
puts "当前文件名称: $argv0"
# 获取变量值
puts "当前系统变量PATH的值是: $env(PATH)"
set key value
puts "普通变量 key 的值是: $key"
# 查看版本信息
puts "当前tcl版本信息: $tcl_version"
脚本执行效果
[root@localhost ~]# expect expect_test1.expect
当前文件传递的参数数量: 0
当前文件传递的参数:
当前文件名称: expect_test1.expect
当前系统变量PATH的值是: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
普通变量 key 的值是: value
当前tcl版本信息: 8.5