`
universsky
  • 浏览: 99284 次
文章分类
社区版块
存档分类
最新评论

脚本语言TCL教程:5

 
阅读更多

1.1 :文件存取

1. 文件打开命令:

格式:openfile fileName ? access ? permission

解释:

Ø fileName:文件名称

Ø access:存取模式

序号

存取模式

描述

1

r

打开文件读。文件必须已经存在

2

r+

打开文件读写。文件必须已经存在

3

w

打开文件写。如果文件不存在创建一个,长度设为零

4

w+

打开文件读写。如果文件不存在创建一个,长度设为零

5

a

打开文件写。文件必须已经存在,位置指到文件末尾

6

a+

打开文件读写,如果文件不存在,创建一个,位置指到文件末尾

Ø permission:权限,举一个例子:

1.2 :文件信息

1File命令提供文件信息

序号

函数

描述

1

file dirname

返回路径名

2

file extension

返回文件扩展名

3

file rootname

返回不包括扩展名的文件名

4

file tail

返回不包括路径名的文件名

5

file atime

返回最后一次文件存取时间

6

file executable

如果可执行返回1

7

file exists

如果文件存在返回1

8

file isdirectory

如果是个路径返回1

9

file isfile

如果是个文件返回1

10

file lstat

返回一个文件状态信息数组

atime:最后一次存取时间

ctime:最后文件状态改变时间

dev:设备节点

gid:文件的组id

ino:节点数

mode:节点保护模式

mtime:最后数据修改时间

nlink:硬链接数

size:文件字节数

type:文件类型

uid:文件用户id

注意:这个函数和file stat不同在于当为一个符号链接时,file lstat是得到链接的信息,而file stat是得到链接的文件的信息

11

file mtime

返回文件最后修改时间

12

file owned

如果用户是该文件所有者返回1

13

file readable

如果文件可读返回1

14

file readlink

返回符号链接的文件名

15

file size

返回文件大小(byte为单位)

16

file stat

返回一个文件状态信息数组

17

file type

返回文件类型

file:普通文件

directory:目录

characterSpecial:字符导向设备

blockSpecial:块导向设备

fifo:命名管道

link:符号链接

socket:套接字

18

file writable

如果文件可写返回1

2glob命令通过匹配模式返回一个文件名列表

格式:glob ?switches? pattern? patternN?

Ø switches

-nocomplain:允许返回一个空列表的时候不生成错误,如果没有这个开关,返回空列表的时候会生成错误

--:允许在匹配式中使用横杠

Ø pattern:匹配式

l {a,b,....}:匹配所有的ab,等字符串

l 文件名以小数点开头则解析为小数点,其他地方就解析为通配符;

l 所有的 / 都必须准确匹配;

l 如果匹配式开始是:~/ ,则 ~ 解析为环境变量HOME

1.3 如果匹配式的TCL中的子进程调用-open & exec

1. 格式:open |progName ?access?

功能:为管道返回一个文件描述符。如果progName用引号括起来,可以包含参数。

2. 格式:exec ?switches?arg1?arg2?....?argN?

功能:执行子进程

Ø switches-keepnewline:管道输出的每行后面加个新行。

-- :标志开关结束,哪怕后面跟着有开头的字符串,都作为参数处理。

Ø argN:参数可以是:可执行程序;作为子进程运行的命令行;输出重定向

输出重定向包含有:

序号

重定向

描述

1

|

将标准输出重定向到标准输入中

2

<fileName

管道中的第一个程序将读入文件内容

3

<@fileID

管道中的第一个程序将读入文件描述符中的内容,该文件描述符是使用 open...”r” 的返回

4

<<value

管道中第一个程序读到这个值

5

>fileName

管道中最后一个程序的输出内容覆盖写入文件

6

>>fileName

管道中最后一个程序的输出内容写入文件,添加到文件末尾

7

2>fileName

管道中所有程序的标准错误输出到文件,覆盖文件原有内容

8

2>>fileName

管道中所有程序的标准错误输出到文件,添加到文件末尾

9

>@fileID

管道中程序输出内容写到文件描述符,该文件描述符是使用open...”w” 打开

例子:027_file.txt

set io [open "|c:/windows/system32/notepad.exe c:/temp/inv_2700.tcl" r+] ;#open 调用外部程序

set invert [exec c:/windows/system32/notepad.exe c:/temp/001.txt] ;#exec 调用外部程序

因为管道的例子在windows下比较难举,现以unix下一段代码为例子,通过管道读出 ps(列出进程)命令的输出

tclfolder%tclsh

% set fid [open "|ps -ef" r+]

file5

% gets $fid line;puts "line: $line"

line: UID PID PPID C STIME TTY TIME CMD

% gets $fid line;puts "line: $line"

line: root 1 0 0 Nov 11 - 0:01 /etc/init

% gets $fid line;puts "line: $line"

line: root 86118 1 0 Nov 11 - 5:00 /usr/sbin/syncd 60

% gets $fid line;puts "line: $line"

line: tclll 90248 893094 0 11:54:55 pts/14 0:00 -csh

% gets $fid line;puts "line: $line"

line: root 110730 1 0 Nov 11 - 0:00 /usr/sbin/uprintfd

% gets $fid line;puts "line: $line"

line: root 118848 1 0 Nov 11 - 0:00 /usr/ccs/bin/shlap64

% exit

tclfolder%

1.4 :命令或者变量是否存在-info

1. info命令列表,使用的匹配式规则和string match一致,并且如果不使用匹配式,返回所有的项

序号

命令

描述

1

info commands ?pattern?

返回匹配的命令列表

2

info exists varName

变量存在返回一,否则返回零

3

info globals ?pattern?

返回全局变量列表

4

info locals ?pattern?

返回局部变量列表

5

info procs ?pattern?

返回过程列表

6

info vars ?pattern?

返回变量列表

例子:028_file.tcl

proc safeIncr {val {amt 1}} {

upvar $val v

if {[info exists v]} { incr v $amt} else { set v $amt }

}

if {[info procs safeIncr] == "safeIncr"} { ;#判断过程是否定义

safeIncr a ;#a 没有定义

}

puts "After calling SafeIncr with a non existent variable: $a" ;#返回1

set a 100

safeIncr a

puts "After calling SafeIncr with a variable with a value of 100: $a" ;#返回101

safeIncr b -3

puts "After calling safeIncr with a non existent variable by -3: $b" ;#返回-3

set b 100

safeIncr b -3

puts "After calling safeIncr with a variable whose value is 100 by -3: $b" ;#返回97

puts "\nThese variables have been defined: [lsort [info vars]]"

puts "\nThese globals have been defined: [lsort [info globals]]"

;# 检查本地过程是否存在

set exist [info procs localproc];

if {$exist == ""} {

puts "\nlocalproc does not exist at point 1"

}

proc localproc {} {

global argv;

set loc1 1;

set loc2 2;

puts "\nLocal variables accessible in this proc are: [lsort [info locals]]"

puts "\nVariables accessible from this proc are: [lsort [info vars]]"

puts "\nGlobal variables visible from this proc are: [lsort [info globals]]"

}

set exist [info procs localproc];

if {$exist != ""} {

puts "localproc does exist at point 2"

}

localproc;

1.5 :解释器状态-info

1. 关于当前解释器状态信息命令列表

序号

命令

描述

1

info cmdcount

返回解释器已经运行的命令的数量

2

info level ?number?

返回相应栈级别的过程的名字和参数

3

info patchlevel

返回全局变量解释器补丁版本和修订号tcl_patchlevel的值

4

info tclversion

返回全局变量解释器版本tcl_version

5

info script

返回当前脚本的名字

6

pid

返回当前解释器进程id

例子:029_file.tcl

puts "This is how many commands have been executed: [info cmdcount]"

puts "Now *THIS* many commands have been executed: [info cmdcount]"

puts "\nThis interpreter is revision level: [info tclversion]"

puts "This interpreter is at patch level: [info patchlevel]"

puts "\nThe temporary script this is executing is named: [info script]"

puts "The Pid for this program is [pid]"

proc factorial {val} {

puts "Current level: [info level] - val: $val"

set lvl [info level]

if {$lvl == $val} {return $val;}

return [expr ($val-$lvl) * [factorial $val]];

}

set count1 [info cmdcount]

set fact [factorial 3]

set count2 [info cmdcount]

puts "The factorial of 3 is $fact"

puts "Before calling the factorial proc, $count1 commands had been executed"

puts "After calling the factorial proc, $count2 commands had been executed"

puts "It took [expr $count2-$count1] commands to calculate this factorial"

1.6 :过程信息-info

1.关于过程信息的命令列表

序号

命令

描述

1

info args procname

返回一个过程的参数列表

2

info body procname

返回一个过程的内容

3

info default procname arg varName

如果一个过程的某个参数设置了缺省值则返回一,否则返回零

例子:030_procinfo.tcl

proc demo {argument1 {default "DefaultValue"} } {

puts "This is a demo proc. It is being called with $argument1 and $default"

}

puts "The args for demo are: [info args demo]\n"

puts "The body for demo is: [info body demo]\n"

set arglist [info args demo]

foreach arg $arglist {

if {[info default demo $arg defaultval]} { ;#defaultval 用于取回缺省值

puts "$arg has a default value of $defaultval"

} else {

puts "$arg has no default"

}

}

分享到:
评论

相关推荐

    TCL脚本语言详细教程

    ### TCL脚本语言详细教程 #### 一、TCL语法概览 TCL(Tool Command Language)是一种轻量级的脚本语言,以其简洁高效的特点广泛应用于自动化测试、配置管理等多个领域。对于初学者而言,了解TCL的基本语法是至关...

    TCL+TCL脚本语言编程+TCL语言教程

    以下是对TCL脚本语言编程和TCL语言教程的一些关键知识点的详细说明: 1. **基本语法**:TCL的语法简洁明了,以空格和换行符作为语句分隔。命令通常由关键字和参数组成,不区分大小写。例如,`puts`命令用于打印输出...

    tcl脚本语言的教程

    TCL(Tool Command Language)是一种解释型的、动态类型的脚本语言,由John Ousterhout教授在1988年开发。它以其简洁、易学的特点被广泛应用于各种领域,包括系统管理、网络编程、GUI开发等。下面将详细介绍TCL脚本...

    tcl中文教程---最好的Tcl脚本语言的中文教程,值得下载

    本文将根据提供的《TCL中文教程》的部分内容,总结并详细介绍TCL脚本语言的关键知识点。 #### 二、TCL语法 TCL的语法简洁而强大,主要包括脚本结构、单词和命令等组成部分。 ##### 2.1 脚本、命令和单词符号 - **...

    脚本语言Tcl教程.pdf

    TCL(Tool Command Language)作为一门功能强大且灵活的脚本语言,在众多领域有着广泛应用。这本教程以其独特的魅力,成为学习 TCL 语言的不二之选。 教程内容全面且系统,从 TCL 语言的基础语法讲起,细致入微地...

    TCL.zip_TCL教程_tcL学习_tcl脚本_tcl语言_脚本 tcl

    TCL(Tool Command Language)是一种强大的脚本语言,由John Ousterhout在1988年开发。它被设计为一种简洁、易学、易用的语言,主要用于系统管理、网络编程、GUI(图形用户界面)开发以及嵌入式系统的控制。TCL以其...

    TCL脚本语言培训教程(中文版)

    ### TCL脚本语言培训教程(中文版)知识点详解 #### 1. 引言 - **TCL**(Tool Command Language)是一种轻量级的解释型脚本语言,以其简洁性和易用性著称。 - **适用场景**:主要用于自动化测试、系统管理任务以及...

    TCL脚本语言基本教程

    **TCL脚本语言基本教程** TCL(Tool Command Language),一种强大且灵活的脚本语言,由John Ousterhout在20世纪80年代末创建,最初用于编写工具命令。TCL以其简单易学、语法简洁以及与其他语言的无缝集成而闻名,...

    TCL教程(中文).pdf

    TCL是一种轻量级的脚本语言,广泛用于自动化任务、系统管理以及嵌入式系统。这份TCL教程中文版提供了全面的学习资源,涵盖了从基础语法到高级特性的方方面面。 ### TCL语法 TCL的语法相对简洁,由脚本、命令和单词...

    TCL脚本语言入门教程

    TCL脚本语言入门教程 TCL(Tool Command Language)是一种高级的脚本语言,广泛应用于自动化测试、网络管理、数据库管理等领域。下面是TCL脚本语言入门教程的详细知识点总结。 一、TCL语法 TCL语法是TCL语言的...

    系统学习TCL脚本入门教程

    它最初设计用于快速开发简单的命令行工具,但随着其发展,TCL已经成为一种功能全面的脚本语言,能够处理复杂的任务,甚至可以与C++或Java等编译型语言进行集成。 运行TCL脚本需要一个TCL解释器,如ActiveTCL,它可...

    TCL脚本语言编程

    ### TCL脚本语言编程知识点详解 #### 一、TCL基本概念 **TCL全称:** Tool Command Language,是一种轻量级的脚本语言,主要用于快速开发各种自动化任务、配置管理和GUI应用。 **特点:** - **基于字符串:** 大...

    TCL脚本语言手册(很详细)

    ### TCL脚本语言手册知识点概览 #### 一、TCL基本知识 **1.1 什么是TCL** TCL(Tool Command Language)是一种轻量级的解释型脚本语言,设计初衷是为了方便用户快速地编写小型应用程序或脚本来解决各种问题。TCL...

    Tcl语言全攻略,TCL脚本语言

    Tcl(Tool Command Language,工具命令语言)是一种简单、易学、强大的脚本语言,尤其适合于快速开发和集成系统。在华为等大型科技公司中,Tcl因其灵活性和高效性,常被用于自动化测试、网络设备配置、系统管理等...

    TCL脚本语言编程.pdf

    描述与标签中的重复提及“TCL脚本语言编程.pdf”,暗示了这份文档可能是关于TCL编程的详细介绍或教程,旨在帮助读者掌握TCL语言的基础知识、高级特性以及实际应用案例。由于文档的具体内容未能完全展示,我们可以...

    Tcl教程资料.zip

    Tcl(Tool Command Language)是一种动态类型的脚本语言,由John Ousterhout在1988年开发,主要用于编写系统管理和应用控制脚本。它以其简洁、易学和强大的字符串处理能力而闻名。Tcl_Tk是Tcl语言的一个扩展,提供了...

    TCL 语言学习教程

    TCL(Tool Command Language)是一种高级的脚本语言,广泛应用于自动化、测试和开发领域。下面是TCL语言的学习指南,涵盖了TCL语言的基础知识、语法、特性和应用场景。 TCL语言基础 * TCL是一种解释型语言,支持多...

    Tcl详细教程(ppt)

    Tcl是一种简洁而强大的脚本语言,主要用于自动化任务、软件集成和GUI开发。Tcl/Tk教程详细地讲解了Tcl语言的语法和核心概念,同时也涵盖了面向对象编程的特性,使得学习者能够全面理解并掌握Tcl。 1. Tcl语法: ...

    tcl脚本教程入门书

    TCL,全称为Tool Command Language或Terminal Control Language,是一种解释型的脚本语言,其特点是简洁易学且功能强大。TCL的解释器是`tclsh`,它同时也是一种shell环境。由于TCL与C语言在数据类型和控制结构上有...

    系统学习TCL脚本入门教程.doc

    TCL(Tool Command Language)是一种广泛应用于嵌入式系统、网络设备和自动化测试等领域的脚本语言。本教程旨在为读者提供一个系统的TCL脚本入门学习指南,帮助读者快速掌握TCL脚本的基础知识和编程技术。 1. TCL...

Global site tag (gtag.js) - Google Analytics