首页 > 其他分享 >TCL脚本语言学习

TCL脚本语言学习

时间:2023-10-21 12:06:33浏览次数:45  
标签:set 脚本语言 puts expr list1 tcl 学习 TCL 变量

前言  

TCL(Tool Command Language)命令的格式是

命令+字符串,第一个是命令,后面都是字符串,tcl的解释器(逐行执行)会根据命令去对后面的字符串进行相关操作。

注释符号:#

一、安装

启动tcl命令行,以%开头

sudo apt install tcl //安装tcl tclsh //启动tcl %

二、变量列表

1、置换subtitution

(1)变量置换$:把 $ 后面的变量置换成对应的值

set a 2 puts $a //输出2 set b $a+100 //b=2+100,并不是102,2+100只是个字符串

(2)命令置换[]:[ ]内是独立的TCL指令

tcl解释器会把[ ]里面的内容看作是命令去执行,执行完之后的102,去给变量b,102仍然是个字符串

set b [expr $a+100] //必须要加[] set a [expr 3+3] //6 expr 5/2 //2 expr 5.0/2 //2.5 expr 5/2.0 //2.5

(3)反斜杠置换\

\t:制表符

\n:换行

第一种写法会报错,解释器会识别到set给a的字符串有两个

第二种写法解释器会把中间的空格当作分隔符,hello world会被看成一个单词

第三种是可以的

set a hello world set a hello\ world set a {hello world}

(4)双引号和花括号

" ":对$和[]分别进行变量置换和命令置换,对各种分隔符不做处理,如空格等

set y "$a add" //y=2 add set a 2 set y 0.5 puts "[expr $x+$y]" //2.5 puts "[expr $x+$y]" //[expr 2+0.5] puts "[expr $x+$y]" //[expr $x+$y]

{ }:所有字符都是普通字符

set a 2 set a.1 4 set b $a.1 //b=2.1 set b ${a.1} //b=4

2、变量

设置:set 变量名 变量值

取值:puts $ 变量名

set a 2 puts $a puts ${a}_1 //2_1

3、数组

类似于SV中的关联数组,索引值可以是整型也可以是字符串

不可以单独声明一个数组,数组只能和数组元素一起声明

定义:set 数组名(元素名)值

取值:$数组名(元素名)

set day(monday) 1 puts $day(monday) //输出为1

array size cell_1 //3 array names cell_1

4、列表

标量的有序集合 ,列表可以嵌套,里面元素可以是列表

定义:set 列表名 {元素1 元素2…}

取值:$列表名

list 1 2 {3 4} set list1 {1 2 3} puts $list1 //1 2 3

5、一些命令

unset:删除变量或数组元素

append:把文本添加到一个变量后面

incr:把一个变量加上整数,都必须是整数类型

expr:经常用,TCL支持常用的数学函数,凡是计算都要加上这个

eval:构造和执行tcl脚本的命令,可以接收多个参数,把这些参数用空格隔开然后创建一个脚本

unset a bset txt hello append txt "!how are you" incr b 3

三、控制流

1、if语句

if {cond1}{

}elseif{cond2}{

} else {

}

上面是if的格式,花括号要放在上一行(固定格式)

2、foreach

foreach 变量 列表 循环主题

按照顺序取列表里面的每一个变量

set list1 {1 2 3}foreach i $list1{ puts $i }

3、break:直接结束循环

set list1 {3 2 1}foreach i $list1{ if{$i == 2}{ break } puts $i } //最后只输出3

4、continue:结束本次循环

set list1 {3 2 1}foreach i $list1{ if{$i == 2}{ continue } puts $i } //最后输出3 1

5、while

while{cond1}{

}

只要条件满足就一直执行花括号里面的命令,不满足条件停止循环,while中断并返回一个空字符串

6、for循环

for 参数初始化 判断条件 重新初始化参数 循环主体

先判断语句符合,进入循环,重新初始化参数,再进行判断

for {set i 3}{$i>0}{incr i-1}{puts i } //输出3 2 1

7、switch

switch option string{

}

option的选项默认是glob

-glob:匹配字符串

-regexpr:正则表达式的匹配方式

-exact:精确匹配

switch $x{b {incr t1} c {incr t2} }

四、过程函数

1、proc自定义函数

proc 参数名 参数列表 函数主体

可以写return或者不写

proc add {a b} {

set sun [expr $a + $b]

return $sum

}

add 3 4 //输出为7

标签:set,脚本语言,puts,expr,list1,tcl,学习,TCL,变量
From: https://blog.51cto.com/u_12597366/7965409

相关文章

  • MySQL学习(7)连接的原理
    什么是连接连接就是把各个表中的记录都取出来进行依次匹配。若无过滤条件,连接查询的结果集中包含一个表中的每一条记录与另一个表中的每一条记录相互匹配的组合,这样的结果集称为笛卡尔积。测试数据:CREATETABLEt1(m1INT,n1char(1));CREATETABLEt2(m2INT,n2char(1));......
  • Markdwon学习
    Markdwon学习二级标题三级标题超链接 点击跳转博客网列表aaa表格姓名性别生日张三男1999.3.229   代码​ ......
  • 【无监督机器学习】9.推荐系统
    推荐系统推荐系统的定义推荐系统是利用用户产生的行为数据,对用户的兴趣进行建模,从而给用户推荐可能感兴趣的物品。推荐系统的应用电商网站新闻网站流媒体平台协同过滤协同过滤是一种基于用户行为的推荐算法,它的基本思想是利用用户的历史行为数据,计算用户之间的相似度,然......
  • java基础漏洞学习----基础命令执行漏洞
    java基础漏洞学习----基础命令执行漏洞基础命令执行常见方法1.ProcessBuilderpackagecom.example.servletdemo;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjavax.servlet.ServletException;importjavax.servl......
  • 学习笔记6
    教材第三章知识点总结Unix/Linux进程管理:多任务处理:多任务处理是指操作系统同时运行多个进程或线程的能力。操作系统通过时间片轮转或优先级调度等算法来实现多任务处理。多任务处理可以提高系统的资源利用率和响应速度。进程的概念理解:进程是程序的执行实例,是操作......
  • React学习笔记14-dangerousSetinnerHtml指令
    1.使用场景dangerouslySetInnerHTML指令能将字符串当做html解析相当于vue中的v-html指令一般我们用来渲染富文本返回的html文本2.使用方法{this.state.tolist.map((item,index)=>{return(<spandangerouslySetInnerHTML={{__html:item}}ke......
  • 基于深度学习的玉米病害识别:探索农业智能化的前沿技术【玉米病害识别实战】
    玉米是世界上最重要的粮食作物之一,然而,玉米病害对其产量和质量造成了严重威胁。传统的病害识别方法通常依赖于人工观察和经验判断,效率低下且易受主观因素影响。近年来,基于深度学习的图像识别技术在农业领域取得了显著进展,为玉米病害的快速、准确识别提供了新的解决方案。本文将介绍......
  • 现代无线移动通信学习
    一、绪论1.1、无线移动通信发展历程  20世纪五六十年代,贝尔实验室蜂窝概念:分出多个小区,每个小区一个基站,相同的频段可以在相距较远的小区间重复使用,小区间干扰处理技术使得相同的频段可以在相邻的小区间重复使用。  第一代移动通信系统是模拟通信系统,形成于20世纪80年代,采......
  • makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录
    注:本文个人学习记录目的:一个工程里有多个makefile如何make根目录下的makefile调用子目录下的makefile,编译所有.c文件如图所示目录结构,根目录server:makefile;子目录so:makefile  根目录makefile:GCC=gccAPP=server ALL_C=$(wildcard./*.c)C_OBJ=$(notdir$......
  • java基础漏洞学习----文件操作漏洞
    java基础漏洞学习----文件操作漏洞前置基础知识https://www.cnblogs.com/thebeastofwar/p/17760812.html文件上传漏洞文件上传的方式1.通过文件流index.jsp<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOC......