⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000019.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;ruster&nbsp;(尘埃*星辰*领悟),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;第十一章&nbsp;任务的自动化&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Thu&nbsp;Dec&nbsp;21&nbsp;13:55:18&nbsp;2000)&nbsp;<BR>&nbsp;<BR>第11章&nbsp;任务的自动化&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;本章要点:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;本章介绍用来替代shell脚本的工具,如TCL和perl。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本章具体包括以下内容。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;TCL/expect的使用&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;awk语言的基本知识&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;perl语言的基本知识&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;11.1&nbsp;TCL和expect&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;TCL是一种类似shell脚本的语言,你可以使用它来完成许多操作。不过,我介绍它的&nbsp;<BR>主要原因是expect是从它发展出来的。如果你想要写一个能够自动处理输入输出的脚本&nbsp;<BR>(如向用户提问并且验证密码)又不想面对C或者Perl,那么expect是你的唯一选择。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;11.1.1&nbsp;TCL语言&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;要使用TCL,你必须先安装这个程序:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;rpm&nbsp;-q&nbsp;tcl&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;tcl-8.0.5-30&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;TCL语言可以用交互式或者脚本的方式执行,要使用交互式的TCL环境,只要输入&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;$&nbsp;tclsh&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>%&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;出现的&quot;%&quot;符号是TCL的提示符,然后就可以使用TCL命令的。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;如果你要使用脚本方式的TCL,首先把你的脚本写成一个文本文件,例如test.tcl,然&nbsp;<BR>后执行&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;$&nbsp;tclsh&nbsp;test.tcl&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;在tcl脚本中,每一行或者是一个命令行,或者是一个注释。注释行必须以#符号开头&nbsp;<BR>,而命令行最好以分号结束,虽然不一定要这样做,但是这样做可以免去不少麻烦。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;变量&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;在tcl中,有两种基本类型的变量,即标量和数组。标量就是一般的数字或者字符串变&nbsp;<BR>量,可以用set语句定义同时赋值:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;i&nbsp;1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;字符串应该用引号括起来:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;str&nbsp;&quot;test&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;'test'&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;要输出一个标量的内容,使用put语句:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;puts&nbsp;$str&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;test&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;$用来说明str是一个变量。puts函数在标准输出显示变量的内容。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;数组也可以用set语句定义,实际上,tcl中建立数组只是单个建立数组的元素。例如&nbsp;<BR>,&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;arr(1)&nbsp;0&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>0&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;arr(2)&nbsp;1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这样就建立了一个两个元素的数组arr。在TCL中,不存在相当于数组边界这样的东西&nbsp;<BR>,例如&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;arr(100)&nbsp;to&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;to&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这时数组中实际只存在arr(1),arr(2)和arr(100),这是和C语言不同的地方。用arr&nbsp;<BR>ay&nbsp;size命令可以返回数组的大小:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;array&nbsp;size&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>3&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;访问数组的方法和访问标两实际是一样的,例如:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;puts&nbsp;$arr(100)&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;to&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;可以用同样的方法创建多维数组。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;要使用数组中的所有元素,需要使用一种特殊的便利方式。首先要启动startsearsh:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;array&nbsp;startsearch&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;s-1-arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这里返回了一个搜索id,你可以把它传递给某个变量,因为以后还要使用它进行进一&nbsp;<BR>步的搜索:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;my_id&nbsp;[array&nbsp;startsearch&nbsp;arr]&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;s-1-arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;现在my_id的内容是s-1-arr,然后,就可以搜索arr的内容了:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;array&nbsp;nextelement&nbsp;arr&nbsp;$my_id&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;whi&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这里的array&nbsp;nextelement返回的是什么?可能有点出乎你的意料,是arr数组的下标&nbsp;<BR>,再执行一次array&nbsp;nextelement命令又会找出另外一个下标:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;array&nbsp;nextelement&nbsp;arr&nbsp;$my_id&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>4&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这样遍历下去,可以找出arr数组的所有下标,而知道下标之后,就可以用$arr(4)之&nbsp;<BR>类的方式访问arr的内容了。当遍历完成之后,array&nbsp;nextelement命令将简单地返回:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;array&nbsp;nextelement&nbsp;arr&nbsp;$my_id&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>%&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;这时就可以停止遍历过程了,如果你想确认遍历是否完成,可以使用array&nbsp;anymore命&nbsp;<BR>令:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;array&nbsp;anymore&nbsp;arr&nbsp;$my_id&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>0&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;返回0说明遍历已经完成。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;串处理&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;TCL中可以进行一般的串处理过程,这可以使用string命令和append命令,append命令&nbsp;<BR>将某个字符串加到另外一个字符串的后面:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;&nbsp;set&nbsp;str1&nbsp;&quot;test&nbsp;&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;test&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;str2&nbsp;&quot;cook&nbsp;it&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;cook&nbsp;it&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;append&nbsp;str1&nbsp;$str2&nbsp;&quot;&nbsp;and&nbsp;other&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;test&nbsp;cook&nbsp;it&nbsp;and&nbsp;other&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;string命令可以执行字符串的比较,删除和查询,其格式是&nbsp;string&nbsp;[参数]&nbsp;string1&nbsp;<BR>&nbsp;[string2]&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;参数可以是下面的命令之一:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;compare&nbsp;&nbsp;按照字典顺序对字符串进行比较,根据相对关系返回-1,0或者+1。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;first&nbsp;返回string2中第一次出现string1的位置,如果失败,返回-1。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;last&nbsp;&nbsp;返回string2中最后一次出现string1的位置,如果失败,返回-1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;trim&nbsp;&nbsp;从string1中删除开头和结尾的出现在string2中的字符&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;trimleft&nbsp;从string1中删除开头的出现在string2中的字符。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;trimright&nbsp;从string1中删除结尾的出现在string2中的字符&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;下面几个用在string中的参数不需要string2变量:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;length&nbsp;返回tring1的长度&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;tolower&nbsp;返回将string1全部小写化的串&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;toupper&nbsp;返回将string1全部大写化的串&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;运算&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;TCL的运算方式比较别扭,它使用expr命令作为计算符号,其用法类似C语言的+=和/=&nbsp;<BR>,例如,&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;j&nbsp;[expr&nbsp;$i/5]&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;注意TCL会自动选择整数或者浮点计算:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;l&nbsp;[&nbsp;expr&nbsp;$i&nbsp;/4.0]&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;1.25&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;l&nbsp;[&nbsp;expr&nbsp;$i&nbsp;/4]&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;在TCL里面可以使用+&nbsp;-&nbsp;*&nbsp;/和%作为基本运算符,另外通常还包括一些数学函数,如a&nbsp;<BR>bs,sin,cos,exp和power(乘方)等等。&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;另外,还有一个起运算符作用的命令incr,它用来对变量加一:&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;set&nbsp;i&nbsp;1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>1&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;%&nbsp;incr&nbsp;i&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>2&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -