首页 > 其他分享 >控制结构命令

控制结构命令

时间:2024-04-14 18:55:33浏览次数:20  
标签:body puts Tcl 控制结构 命令 switch elseif

Tcl 提供了 if、 if/else、 if/elseif、 foreach、 for、 while 和 switch 命令来管理控制结构。这些命令和其他语言如C语言的条件语句的作用相同。需要区别的是在 Tcl 中所有控制结构都是由相应的命令来实现,而 C 语言中则是一条控制语句。 

控制结构通常要求带有一个延迟执行命令体或者过程体,这个命令体需要用花括号括起来以加以界定。 

1. if/else 命令

if 命令根据表达式的结果来执行命令体:如果表达式结果为真,则执行命令体,否则会执行另外一个条件命令体(如果存在的话)。后面两个命令体(elseif 和 else)是可选的。

if {test expr 测试表达式} {

  body 1

} elseif {test expr} {

  body2

} else {test expr} {

  body3

}

注意

  • 语法中用以界定过程体的花括号一定要和 if 命令在同一行上!因为对 Tcl 来讲,换行符就是命令结束符,所以如果在 if 表达式后直接换行,写成: 

if {test expr}

{

  ...

}

就会出错。 Tcl 遇到换行后就认为命令结束,但找不到执行命令体,返回错误。其他的控制命令,还有以后的过程定义命令等等都存在这个问题。 

  • 如果 if 后面还有 else/elseif 命令,则要留意 else/elseif 的位置。 else/elseif 要跟在 if执行命令体的后面一个花括号后,不能分行,要有空格间隔花括号和 else /elseif。 
  • 花括号括起的表达式、执行命令体或者其他内容相当于变量存在,所以前后与其他命令元素之前要有空格,否则 Tcl 会返回语法错误。 

示例:

  • set x hello

if {![string compare $x hell]} {

  puts "String is hell"

} elseif ![string compare $x hel] {

  puts "String is hel"

} elseif ![string compare $x hello] {

  puts "String is hello"

} else { puts "Error input string"}

    •  => String is hello

例子中 if 的表达式用花括号括了起来,而 elseif 的表达式却没有花括号,这两种表达方法都可以,但用花括号的时候条件命令语句执行得更有效率。 

2. for命令

for 命令的语法格式为: 

for {start} {test expr} {next} {

  body

}

for 命令有四个变元, start 是预置条件或者初始化命令,告诉 for 命令起始执行条件。 test expr 是条件布尔表达式,以决定是否执行循环体 body,如果是真,则执行循环体,如果假则退出命令。如果表达式真,则在执行循环体后处理 next 命令,即 next 是一个后置命令执行体。

前三个变元可以选择置空,而将相应的处理放到循环体 body 中去。 

for {set i 0} {$i < 10} {incr i 2} {

  if {$i == 4} {

    continue;

  }

  puts "i = $i"

  if ($i >= 6) {

    break;

  }

}

break 命令导致立刻从循环体内退出。而 continue 在 i 值为 4 的时候忽略后面的循环体的内容而执行下一个循环。 

3. while命令

while 命令格式为:

while {test} {

  body

while 循环的例子:

set i 3

while {$i > 0} {

  puts "Current index is $i"

  incr i-1

}

4.  break 与 continue 命令 

break 命令立即终止循环并退出循环体。而 continue 命令则会忽略后面的循环体内容而继续下一个循环处理过程。 Tcl 中没有 goto 命令。 

5.  switch 命令 

switch 命令通过将给定字符串与不同的匹配模式进行匹配从而选择执行多分支命令体。switch 可基于模式匹配。命令格式为:

switch [option] string {

  pattern-1 {body-1}

  pattern-2 {body-2}

  pattern-3 {body-3}

注意:

  • option 主要有:
    • -exact  用精确匹配(默认);
    • -flob    用glob格式行模式匹配;
      -regexp    用正则表达式模式匹配;
    • --    标记选项结束或说明不用选项;
  • 如果项邻的两个或者多个 pattern-x 的执行命令体是一样的,则可以只写出最后的一个执行命令体,而前面的执行命令体可以省略,并用“ -”号来替代。 
  • 最后一个 option 一定是 “--",这个选项不可缺少! (标记option结束)
  • 对于 switch 执行命令体 内的注释一定要小心。 Tcl 语法器处理的注释应该和命令处于同一层次,即一个注释要占用一个命令的位置。这样就限制了在 switch 体内注释的位置。比如你不能将一条注释放在和 pattern-n 同一级别的位置,那样 switch 命令就会将此条注释也当成一个匹配模式来解释,这有可能引起意想不到的错误。所以,如果打算在switch 体内写注释的话,最好将注释放在相应的某个匹配模式的命令体 body-n 内。 

switch 命令的简单例子 :

  • set result TRUE

  • switch -exact -- $result {

  #Comment1:This comment will confuses switch command

  "TRUE" {

    #Comment2:This comment is ok

    puts "TRUE"

  }

  "FALSE" {

    puts "FALSE"

  }

  "UNKNOW"-

  default { puts "UNKNOW or unkown value"}

}

6. catch命令

在实际应用中,如果一条命令或函数在调用时使用了错误输入参数或者自身出现错误,它就会报错,而且终止当前脚本的执行。严重的错误也可能导致 Tcl shell 退出。 catch 命令就可以用来捕获这种调用错误。 

语法:

  • catch {com_proc} ?res?

catch 命令有两个变元, com_proc 是命令体。 res 用来保存命令返回结果,或是出错时的错误信息,此变元为可选项。如果有错, catch 会返回 1,无错就返回 0。命令体需要用花括号括起来。

示例:

  • set status [catch {puts "The value of y is $y"} res]

    •  => 1  #因为用了未定义的变量y出错

if {$status} {

  puts "Command faild. Error Info:$res"

}

    •  => Command faild. Error Info:$res

7. error命令

error 命令报告错误信息并终止脚本执行。 

语法:

  • error message_string ?info? ?error_code? 

message_string 是错误信息字符串, info 变元用于初始化全局变量 errorInfo,如果 info 没有提供,则 error 自身初始化 errorInfo。变元 code 指定了一个机器可读的错误信息,会被存储在全局变量 errorCode 中,默认为 NONE。 

8. return 命令 

在一个过程中,可以使用 return 来返回调用。 return 的位置可以根据各种条件和需要进行安排,而且一个过程中可以包含多条 return 命令,但当遇到第一个可执行的 return 命令时就返回。

通常使用的 return 命令,或者不带变元,或者仅仅返回一个参数值。其实 return 命令的可选变元还有许多: 

  • retrun ?-code cd? ?-errorinfo info? ?-errorcode errc? str 

-code 的选项值是 ok、 error、 return、 break、 continue,也可以是一个整数。默认为 ok。

-code error 选项使 return 命令功能和 error 非常相似。此时-errorcode 选项设置全局变量errorCode,而-errorinfo 选项为 errorInfo 提供辅助信息。 

9. exit 命令 

exit 命令用来终止脚本的执行。 exit 会终止并退出整个运行脚本的进程(退出 Tcl shell),使用时要小心。如果在退时提供了一个整数数值,则它代表退出状态。 

标签:body,puts,Tcl,控制结构,命令,switch,elseif
From: https://www.cnblogs.com/love-9/p/18134516

相关文章

  • Linux-用户管理-查看用户命令id-/etc/passwd-/etc/shadow-系统中用户的约定和规范
    1.Linux下的用户有什么作用1)系统上的每一个进程(运行的程序)都需要特定的用户运行2)每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制3)进程能够以何种方式访问某一个文件或目录,与进程所关联的用户有关  2.用户相关查看命令命令:id#语法id[option......
  • docker常用命令收藏
    1.与docker启停关闭等相关系统命令docker-V#查看docker版本信息docker--help#查看docker命令帮助信息systemctlstartdocker.service#启动dockersystemctlstopdocker.service#停止dockersystemctlrestartdocker.service#重启dockersystemctlstatusdocke......
  • 在Linux中,如何使用cron和at命令进行任务调度?
    在Linux中,cron和at命令是两个用于任务调度的工具。它们允许用户安排在特定时间或日期执行脚本或命令。1.使用cron进行任务调度cron是一个基于时间的作业调度器,它在后台运行并定期检查crontab中的作业,然后执行它们。编辑crontab文件:查看当前用户的crontab文件:crontab-l......
  • 在Linux中,如何编写脚本处理命令行参数?
    在Linux中,编写脚本处理命令行参数是编写shell脚本的基本功之一。命令行参数是用户在执行脚本时附加在命令行上的额外信息,这对于增加脚本的灵活性和复用性至关重要。以下是如何在bashshell脚本中处理命令行参数的几种常见方法:1.位置参数bash提供了一系列特殊变量$0至$9用于......
  • 服务器防火墙命令
    开启防火墙servicefirewalldstart重启防火墙servicefirewalldrestart关闭防火墙servicefirewalldstop查看防火墙规则firewall-cmd--list-all查询指定端口是否开放firewall-cmd--query-port=8080/tcp开放指定端口firewall-cmd--permanent--add-port=80/tcp移......
  • 命令执行
    Linux特有:;前面的执行完执行后面的Windows:|管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)||当前面的执行出错时(为假)执行后面的&将任务置于后台执行&&前面的语句为假则直接出错,后面的也不执行,前面只能为真%0a(换行)%0d(回车)命令注入-无过滤127......
  • linux 常用命令有哪些
    linux常用命令有哪些 写回答关注问题点赞收藏分享发现错别字举报回答1浏览3891 帅末2linux常用命令有:pwd命令使用pwd命令找出您所在的当前工作目录(文件夹)的路径。该命令将返回一个绝对(完整)路径,该路径基本上是所有以/开头的目录的路径。绝对路......
  • cmd删除命令
    前言在windows下的命令行指令中,删除文件和删除文件夹是两个不同的操作;可以用win+r命令打开cmd窗口试一试。一、删除文件命令【谨慎操作】del或者erase是windows下删除文件的命令,命令不区分大小写,帮助文档如下:[](javascript:void(0)......
  • 在代码中获得linux shell命令执行结果的方法
    1.使用``符号``符号,及键盘左上角的反引号,类似markdown的内嵌代码,可以直接获得命令的执行结果作为字符串。charbuf[100];sprintf(buf,"echo\"`date`:%d\">>~/test_data.txt",123);system(buf);2.使用管道#defineCMD_RESULT_BUF_SIZE1024intExecute......
  • linux C++程序测试命令的一种实现
    linuxC++程序测试命令的一种实现前言在程序开发调试过程中,或者已经部署的情况下,我们常常需要执行一些测试命令。在命令行端输入命令,然后程序执行,说起来简单,但是当程序本身有很多终端调试信息输出时,命令输入很不方便。针对上述问题,以下提供一个使用消息队列的命令行测试小工具......