代码改变世界

TCSH 编程(3)

2008-01-09 18:40  Jeff  阅读(826)  评论(0编辑  收藏  举报

 

控制流结构

 

1,                     退出状态

任何命令进行时都将返回一个推出状态,如果要观察其退出状态,可使用命令echo $?来查看。

要推出当前进程,tcsh 提供命令exit ,一般的格式为exit   n (n 为一数字)

 n0,退出成功,无错误。

n1,退出失败,某处有错误

推荐加入脚本本身的退出脚本值是一种良好的编程习惯。

 

 

2,if-then-else 语句

格式:if( expr )then              //如果此处then另起一行,则会报错”if:empty if.”

                  commands

            else

                  commands

            endif                         // 此处endif 可以省略

 

例子:

1,简单的if-then-else语句。

 

3,测试文件拷贝是否成功。

 

小问题:在输出时,系统提示的出错信息和自己设置的提示都显示出来,如何屏蔽掉系统的出错提示呢?―――――错误重定向。

 

3 , switch 语句

格式:switch( expression )

                  case comparasion 1:

                          commands

                          breaksw

                  case comparasion 2:

                           commands

                           breaksw

                  default:

                  endsw

例子:

1”set va = $<”意思为从键盘读入一个数值作为变量va 的值。

1,如果每个case后面不加breaksw的话,则程序继续执行case 之后的语句 

                

4 , for循环语句

格式:foreach variable( wordlist )

            commands

……

end

 

含义解释:这个语句表示变量将取得wordlist 中每个可能的值。执行的循环命令是在语句foreach end 之间的。

例子:

1,给某个目录下的所有文件改名。

 

 

tcsh下,*代表改目录下的所有文件

 

2,计算某个目录下的文件数目。

 

注意点:在tcsh下,关于变量的赋值问题。如果写成:

set temp = 1

temp  = 2

则会报错“temp : command not found”解决方式是第二句写成set temp = 2.实际的操作实现是将原来的temp变量覆盖,并没有重新分配空间。

 

更简便的实现方法:

 

set temp =*

echo $#temp

 

5while语句

格式:while ( expr )

             commands

             ……

             end

 

 

6,循环控制语句

1,break:用于退出最接近的foreach/while循环过程,可以制定跳出的层数。如果在两层循环内,则用break 2正好跳出。

 

2,continue:此命令继续执行最靠近的的while/foreach语句。当前其他的命令被执行。

 

例子:

 

 

数组

形式:括号中用空格或制表符分隔的一列词,数组元素的下标从1开始(和传统中的数组定义有所不同)。

例子:

 

重定向

一:标准输入,输出和错误

 

            当我们在shell中执行命令得时候,每个进程都和三个打开的文件相联系,并使用文件描述符来应用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。

 

文件

文件描述符

缺省的设备

输入文件-标准输入

0

键盘或是文件

输出文件-标准输出

1

屏幕或是文件

错误输出文件-标准错误

2

屏幕或是文件

 

二:文件重定向

 

在执行命令时,可以指定命令的标准输入,输出和错误,要实现这一点就需要使用文件重定向,下表完整的列出了最常用的重定向组合。

 

规则:

 

几种常用用法:

1,ls  -a >> record.txt

(输出重定向,将当前目录下的文件显示内容附加到record.txt)

 

2,( cat 1.txt 2.txt > account.out) >& account.error

(将1.txt 2.txt文件的合并内容输入到account.out中,如果发生错误则输入到account.error中)

 

3,grep "good" 1.txt >& account.out

(在1.txt中搜索含有good的字符串,并将输出结果和可能发生的错误都输入到account.out中)