lt;lt;TCSH shell 编程gt;gt;入门[转贴]
chg1226
|
1#
chg1226 发表于 2003-08-22 11:13
lt;lt;TCSH shell 编程gt;gt;入门[转贴]
<<TCSH shell 编程>>入门
简介 TCSH shell不同于其他的shell,因为控制结构更符合程序设计语言的格式.例如 TCSH 的test条件的控制结构是表达式,而不是linux命令,得到的值是逻辑值true 或false,TCSH的表达式与C语言中的表达式基本相同. 一,TCSH shell变量,脚本,参数 用户可以在shell中定义变量,为变量赋值以及引用脚本参数.TCSH使用set,@,setenv定 义一变量,也可以用相同的方法定义数值变量和数组,用户通过@命令定义的数值变量来 进行算术运算,用户使用圆括号()和方括号[]定义和引用数组.脚本也可以用相同的方 法操作,但是有个例外,尽管可以用echo命令输出提示符,但没有read命令处理输入,相 反,必须重定向到一个变量里. 二,脚本输入和脚本输出: $ < 用户能够在脚本范围中定义和使用变量.在下例中,使用文本编辑器把赋值操作和echo 之类的linux命令放在一个文件中.然后, 可以产生可执行文件并像其他命令一样在命 令行中执行它,要记住添加可执行权限,必须使用带u+x参数的chmod命令或者带绝对参 数700的chmod命令.在脚本中,可以使用echo命令去输出数据,但是,必须通过重定向标 准输入把输入读入变量.在TCSH中没有linux read命令的比较版本.记住TCSH全部的脚 本文件的第一行的第一个字符必须是"#"字符. 如: # #display "hello" set string="hello" echo The value of string is $string set命令和重定向符号结合$<将用户输入的任何数据读入标准的输入中.下例中,把用户 输入读入string变量中. %set string=$< abc %echo $string abc 能够把提示符放置到相同的行用作echo的输入.TCSH使用一个特殊的选项-n,将消除输 出字符串中的回车符.光标将保留在输出字符串的结尾处. %echo -n please enter a string %cat hello # echo -n "please enter a string:" set string=$< echo "the value of string is $string" %chmod u+x hello %hello please enter a string:hello the value of string is hello % 三,操作符 TCSH有一系列标准的赋值,算术和关系运算以及重定向和后台操作等函数 赋值运算符 功能说明 = 赋值操作 += 先加再赋值 -= 先减再赋值 *= 先乘再赋值 /= 先除再赋值 %= 取余再赋值 ++ 自增量1 -- 自减量1 算术运算符 说明 - 负号 + 加法 - 减法 * 乘法 / 除法 % 取余 关系运算符 说明 > 大于 < 小于 >= 大于等于 <= 小于等于 != 不等于 == 等于 重定向和管道符 TCSH支持标准输入和标准输出的重定向和管道操作.如果设置了noclobber特征,要用 重定向操作重写当前文件,需要用符号>!代替> 四,控制结构 同其他shell一样,TCSH也有一系列的控制结构控制脚本的命令的执行.while和if控 制结构是最常用的控制结构.switch和foreach是更专用的控制结构.switch是if条件 的限定形式,检查数值是否等于一系列可能的数值中的一个数值.foreach是循环结构 的限定形式.浏览数值列表,给变量赋新的数值. TCSH不同的控制结构列表: 条件控制结构; 功能 if (expression) then 如果expression为真,则执行commands commands endif if (expression) then 如果expression为真,则执行command1,否则执行 command1 command2. else command2 endif switch (string) 允许在几条替换命令中选择,string为不同的模式 case pattern: commands breadsw default: commands endsw 循环控制结构: 功能 while (expression) 只要expression为真,则重复执行commands, commands 直到expression为假时跳出循环 end foreach variable (argument-list)迭代循环获得和argument-list中一样多的参数 commands (每次循环variable被设置为列表的下一个参数; end 操作方式同BSH) TCSH中的控制结构有别于其他的shell,因为它更接近编程语言(C).TCSH的条件表达 式的值为true/false.BASH和TCSH主要区别在于TCSH的结构不可重定向或进行管道 输出. 五,测试表达式;() if和while控制结构把表达式用作测试.表达式测试的结果为非零(1)表示真,而零 (0)表示假(跟BASH相反).测试表达式可由算术/字符串比较,但是字符串只能作相 等和不相等的比较.而且表达式必须要在()括号内. 如: if (expression) then command endif TCSH有一系列的运算符来分别对字符串进行测试比较.正则表达式可以包含shell脚本的 指令的字符串.如: if ( $var =~[Hh]* ) then #如果变量$var以字母是大写/小写Hh开头,的字符串 echo information #执行命令 endif #结束 有很多测试文件的操作与BASH完全相同.如: if ( -r myfile ) then #测试myfile是否可读 echo info endif 测试表达式的基本操作: 字符串比较: 功能 == 是否相等,若相等返回真 != 是否不等,若不等返回真 =~ 字符串和模式进行测试是否相等(模式为任意正则表达式) !~ 字符串和模式测试是否不等(模式为任意正则表达式) 文件测试: 功能 -e 测试文件是否存在 -r 测试文件是否可读 -w 测试文件是否可写 -x 测试文件是否可执行 -d 测试文件名是否为目录 -f 测试文件是否为普通文件 -o 测试文件是否被用户所拥有 -z 测试文件是否为空 逻辑运算符: 功能 && 与运算,两个条件同时蛮族 || 或运算,有一个条件满足 ! 取反 六,TCSH内建命令 1,数字变量:@ 在TCSH中,用@命令代替set命令来声明数字变量,然后进行算术,关系和位操作,数字和 字符串变量是两个不同的对象,需要用不同的方法管理,不能把set用于数值变量的设置 @命令由关键词,变量名,赋值运算符和表达式构成.如: %@ num=10 #注意空格 %@ sum=2 * ($num + 3) %echo $sum %26 2,alias 格式:alias [name[command]] 关键词alias 别名name 引用的命令command 如: alias list ls alias list 'ls -l' 3,argv 当脚本被执行时,命令行中的单词被分析并放入argv数组中.argv[0],argv[1]... argv[n],其中argv[0]保存命令名,argv[1]保存命令的第一个参数,argv[n]命令的 第n个参数.argv数组元素可缩写元素号码,前面加$.如:$argv[1]写为$1.$argv 写为$*.#argv参数标识符包含输入在命令行中的参数号码,可检查$#argv变量.如: arglist # echo "The number of arguments entered is $#argv" echo "The list of arguments is : $argv
|