csh(tcsh)编程一

来源:互联网 发布:ios9.1软件源 编辑:程序博客网 时间:2024/04/30 06:13

TCSH shell不同于其他的shell,因为控制结构更符合程序设计语言的格式.例如
TCSH 的test条件的控制结构是表达式,而不是linux命令,得到的值是逻辑值true
或false,TCSH的表达式与C语言中的表达式基本相同.(但是, shell中, true为1, false
为0, C语言中, false 为0, 非0为真, tcsh中 $? 查看是否被定义, 如 $?prompt)。
一,TCSH shell变量,脚本,参数
用户可以在shell中定义变量,为变量赋值以及引用脚本参数.TCSH使用set,@,setenv定
义一变量,也可以用相同的方法定义数值变量和数组,用户通过@命令定义的数值变量来
进行算术运算,用户使用圆括号()和方括号[]定义和引用数组.脚本也可以用相同的方
法操作,但是有个例外,尽管可以用echo命令输出提示符,但没有read命令处理输入,相
反,必须重定向到一个变量里.
二,脚本输入和脚本输出: $  大于
= 大于等于
!代替>
四,控制结构
同其他shell一样,TCSH也有一系列的控制结构控制脚本的命令的执行.while和if控
制结构是最常用的控制结构.switch和foreach是更专用的控制结构.switch是if条件
的限定形式,检查数值是否等于一系列可能的数值中的一个数值.foreach是循环结构 版权申明:本站文章均来自网络,如有侵权,请联系028-86262244-215,我们收到后立即删除,谢谢!
的限定形式.浏览数值列表,给变量赋新的数值.
TCSH不同的控制结构列表:
条件控制结构; 功能
if (expression) then
   commands
endif
if (expression) then
   command1
else
   command2
endif
switch (string)
        case pattern:
              commands
              breaksw
        default:
               commands
endsw
循环控制结构: 功能
while (expression)
       commands
end
foreach variable (argument-list)
        commands
end
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
"
%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后继续执行.
7,builtins
列出全部shell的内建命令表.
8,cd
格式:cd [-p][-l][-nl -v][name]
如果给出目录名,此命令把name设置为当前目录,如果命令中没有name,当前目录自动
设置成用户主目录.用于name的"-"引用上一级目录,如果参数name没有给出子目录, 对真正的成功者来说,不论他的生存条件如何,都不会自我磨灭
或不是全路径,或使用./或../引用当前目录及父目录,那么就检查在cdpath shell变量
中列出的目录来寻找该目录名.如果此操作失败,将检查shell变量中是否保存着的目录
路径名.
用-p选项,linux显示目录列表, 用-l,-n,-v选项与用在dirs命令中的选项完全相同.
默认选项-p.
9,continue
此命令继续执行最靠近while/foreach语句.当前行其余的命令被执行.
10,dirs
格式:dirs [-l][-n|-v]
dirs -S|-L [filename]
dir -c
如果不带参数,dirs将显示目录列表,列表开头被列在作侧,第一个目录是当前目录.
带-l选项,用户主目录中的全部子目录被展开,输入项在到达屏幕边缘时,-n选项隐藏

原创粉丝点击