|
||
在unix系统中,像在DOS中的batch一样,你可以把一系列命令输入到一个叫做script的文件中. 利用source命令或者设置这个文件的x(可运行)属性并直接键入该文件名, 就像用一个命令那样, 你就可以让 C shell 从文件中读入命令并执行它们. 当你执行一个shell script时, 系统会检查script文件的第一行以确定如何执行其中的命令 $?namens 判断变量是否存在, 若存在(被set过)则等于 1 。 否则等于 0 例如 % set var='abc' % echo $?var #结果为 1 % unset var◎edafans % echo $?var #结果为 0 $#nameans 计算变量name中的词(words)数 例如 % set var=(a b c) # $#var == 3 % set var='abc' # $#var == 1 % unset var # var: Undefined variable $$afans $$是Cshell的特殊变量, 用于表示执行此script时的进程号. 因为进程号是唯一的, 你可以用$$来生成一个唯一的临时文件,比如tmp.$$. 它可以避免任何文件名的冲突. 当然你也可以开发你自己对$$的独特应用 $重定向符号. 即从终端读入(一行). 比如: set a=($ 即变量a从终端输入. (如果你输入了一个空行或^D, $#a将等于 0 $n和$argv[n]实际上有个微小的差别: 当n大于参数个数($#argv)时, $argv[n]要报错,而$n永远也不会有这种"下标溢出"的错 对其他变量, 也不会发生"下标溢出"的错误, 例如: 2.文件操作格式 -操作符 filename -e 文件存在返回1(.true.), 否则返回0(.false -r 文件可读返回1,否则返回0 -w 文件可写返回1,否则返回0 -x 文件可执行返回1,否则返回0 -o 文件属于用户本人返回1, 否则返回0. -z 文件长度为0返回1, 否则返回0. -f 文件为普通(plain)文件返回1, 否则返回0. -d 文件为目录文件时返回1, 否则返回0. 3.路径名操作ns 你可以对路径名进行操作, 以便于去掉你不需要的部分 :t (tail)只保留路径名最右边的部分, 而将前面的全部去掉. (相当于basename) :r (root)去掉从"."(dot)开始的后缀部分. :e (end)去掉从左边开始一直的"."的前缀部分 :h (head)去掉最后的一部分, 只保留文件所在的目录名 $var_file:t == file1.txt $var_file:r == /usr/people/user1/file1 $var_file:e == txt $var_file:h == /usr/people/user1 4.返回代码 严谨的程序应该测试返回代码以判断该程序是正常结束还是别的情况.尤其在你写前后相关的script的时候, 后面的命令要用到前面命令的执行结果的时候.一个命令执行后的返回代码存放在叫做status的变量中, 当命令执行成功正常退出时status为0, 否则为1.◎比如你想检查前面一个命令是否正常地被执行了, 从而判断下一个命令是否应该执行,就可以 command1 set checkpoint=$status [commands if(! $checkpoint) then command2 else command3 endif 5. 控制结构 Cshell中基本的控制结构包括 foreach, if结构, 另外还有switch及while,当然还有那个从程序设计概念提出来开始就一直存在的幽灵: goto
if ( expression ) / command # "/"(backslash)后面只能接newline(回车即可), 不能有任何其他字符载 # 单个命令command不能包括"|", "&" 以及";". 也不能使用其它控制语句
if ( expression ) then
|