TCSH shell 编程入门 http://www.linuxsir.org/main/?q=node/139

作者:KornLee
来自:LinuxSir.Org
摘要:TCSH shell不同于其他的shell,因为控制结构更符合程序设计语言的格式。例如TCSH 的test条件的控制结构是表达式,而不是linux命令,得到的值是逻辑值true或false,TCSH的表达式与C语言中的表达式基本相同。

目录

第一篇 TCSH shell简介

一、TCSH shell变量、脚本和参数
二、脚本输入和脚本输出: $ <
三、操作符
四、控制结构 1、条件控制结构;功能
2、循环控制结构: 功能

五、测试表达式;()

1、字符串比较: 功能
2、逻辑运算符: 功能

六、TCSH内建命令

1、数字变量@
2、alias
3、argv
4、bg
5、break
6、breaksw
7、builtins
8、cd
9、continue
10、dirs
11、echo
12、eval
13、exec
14、exit
15、fg
16、foreach
17、history
18、hup
19、if-then
20、if-then-else
21、jobs
22、kill
23、logout
24、nice
25、nohup
26、notify
27、onintr
28、popd
29、printenv
30、pushd
31、repeat
32、set
33、setenv
34、shift
35、source
36、stop
37、switch
38、time
39、umask
40、unalias
41、unset
42、unsetenv
43、wait
44、where
45、which
46、while

第二篇 TCSH配置

一、TCSH shell 特征 1、echo
2、ignoreeof
3、noclobber
4、noglob
5、附录:常用的TCSH shell特征;

二、TCSH shell 变量

1、prompt prompt2 prompt3
2、cdpath
3、history和savehist
4、mail
5、附常用的TCSH shell配置变量

三、TCSH shell初始化文件

1、 .login
2、 .tcshrc
3、 .logout

关于本文
相关文档


++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++

第一篇 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不同的控制结构列表:


1、条件控制结构;功能

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


2、循环控制结构: 功能

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


测试表达式的基本操作:


1、字符串比较: 功能
== 是否相等,若相等返回真
!= 是否不等,若不等返回真
=~ 字符串和模式进行测试是否相等(模式为任意正则表达式)
!~ 字符串和模式测试是否不等(模式为任意正则表达式)
文件测试: 功能
-e 测试文件是否存在
-r 测试文件是否可读
-w 测试文件是否可写
-x 测试文件是否可执行
-d 测试文件名是否为目录
-f 测试文件是否为普通文件
-o 测试文件是否被用户所拥有
-z 测试文件是否为空


2、逻辑运算符: 功能

&& 与运算,两个条件同时蛮族
|| 或运算,有一个条件满足
! 取反


六、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[*]"

%tcsh arglist a b c
The number of arguments entered is 3
The list of arguments is : a b c


argv变量列表:

命令行参数 说明

$argv[0]或$0 命令名
$argv[n]或$n 从1($1-$)开始的第n个命令行参数
$argv[*]或$* 从1开始的所有命令行参数
$#argv或$# 命令行参数的计数


4、bg

格式:bg [%job]

bg命令把指定的任务放入后台。如果此任务已经停止,则继续执行,如果没有参数,将当前任务放入后台。(详细用法与BASH相同此处略)

5、break

格式:

break

break命令用于退出最接近的foreach/while循环过程,执行同一行中其他的命令。

6、breaksw

格式:breaksw

可以从switch语句处中断,在endsw后继续执行。

http://www.linuxsir.org/main/?q=node/139