控制流结构
1, 退出状态
任何命令进行时都将返回一个推出状态,如果要观察其退出状态,可使用命令echo $?来查看。
要推出当前进程,tcsh 提供命令exit ,一般的格式为exit n (n 为一数字)
n为0,退出成功,无错误。
n为1,退出失败,某处有错误
推荐加入脚本本身的退出脚本值是一种良好的编程习惯。
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
5,while语句
格式: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中)