linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > SHELL >
栏目导栏
资料搜索
热门文章
·csh shell编程入门
·玩转Linux shell命令提示符
·Bourne Shell及shell编程
·Shell 编程实例集锦
·Linux下的shell编程入门
·Shell编程基础
·linux shell 编程基础
·shell基础十二篇
·Linux的Shell编程
·linux Shell编程入门 实例讲解
·Linux主要shell命令详解
·Linux shell 脚本实例一
·深入浅出Shell编程: Shell 变量
·shell命令(一)
·UNIX/LINUX SHELL 正则表达式语
最新文章
·Linux系统中加入自定义Shell为
·Shell学习:关于替换命令-tr-R
·Linux Shell学习:uniq命令使用
·uClinux操作系统下的shell功能
·Shell编程基础:单引号和双引号
·Linux操作系统下Shell语句元字
·Linux系统环境程序设计之路
·Linux Shell中PS命令中的%CPU的
·Linux Shell元字符知识笔记
·压缩命令-vi-认识SHELL-正规表
·Linux系统下Shell命令行快捷键
·谈Linux Shell下的输出重定向
·在Shell中执行vi/cp/mv时自动备
·shell数组介绍
·开启和关闭Shell特性的小技巧
Google
 
csh shell编程入门
[ 作者:  加入时间:2006-10-20 14:04:17  来自:Linux联盟收集 ]
TCSH shell不同于其他的shell,因为控制结构更符合程序设计语言的格式.例如A8TLinux联盟
TCSH 的test条件的控制结构是表达式,而不是linux命令,得到的值是逻辑值trueA8TLinux联盟
或false,TCSH的表达式与C语言中的表达式基本相同.A8TLinux联盟
A8TLinux联盟
一,TCSH shell变量,脚本,参数A8TLinux联盟
用户可以在shell中定义变量,为变量赋值以及引用脚本参数.TCSH使用set,@,setenv定A8TLinux联盟
义一变量,也可以用相同的方法定义数值变量和数组,用户通过@命令定义的数值变量来A8TLinux联盟
进行算术运算,用户使用圆括号()和方括号[]定义和引用数组.脚本也可以用相同的方A8TLinux联盟
法操作,但是有个例外,尽管可以用echo命令输出提示符,但没有read命令处理输入,相A8TLinux联盟
反,必须重定向到一个变量里.A8TLinux联盟
A8TLinux联盟
二,脚本输入和脚本输出: $ <A8TLinux联盟
用户能够在脚本范围中定义和使用变量.在下例中,使用文本编辑器把赋值操作和echoA8TLinux联盟
之类的linux命令放在一个文件中.然后, 可以产生可执行文件并像其他命令一样在命A8TLinux联盟
令行中执行它,要记住添加可执行权限,必须使用带u+x参数的chmod命令或者带绝对参A8TLinux联盟
数700的chmod命令.在脚本中,可以使用echo命令去输出数据,但是,必须通过重定向标A8TLinux联盟
准输入把输入读入变量.在TCSH中没有linux read命令的比较版本.记住TCSH全部的脚A8TLinux联盟
本文件的第一行的第一个字符必须是"#"字符.A8TLinux联盟
如:A8TLinux联盟
#A8TLinux联盟
#display "hello"A8TLinux联盟
set string="hello"A8TLinux联盟
echo The value of string is $stringA8TLinux联盟
A8TLinux联盟
set命令和重定向符号结合$<将用户输入的任何数据读入标准的输入中.下例中,把用户A8TLinux联盟
输入读入string变量中.A8TLinux联盟
set string=$<A8TLinux联盟
echo $stringA8TLinux联盟
A8TLinux联盟
abcA8TLinux联盟
abcA8TLinux联盟
A8TLinux联盟
能够把提示符放置到相同的行用作echo的输入.TCSH使用一个特殊的选项-n,将消除输A8TLinux联盟
出字符串中的回车符.光标将保留在输出字符串的结尾处.A8TLinux联盟
%echo -n please enter a stringA8TLinux联盟
A8TLinux联盟
%cat helloA8TLinux联盟
#A8TLinux联盟
echo -n "please enter a string:"A8TLinux联盟
set string=$<A8TLinux联盟
echo "the value of string is $string"A8TLinux联盟
%chmod u+x helloA8TLinux联盟
%helloA8TLinux联盟
please enter a string:helloA8TLinux联盟
the value of string is helloA8TLinux联盟
%A8TLinux联盟
A8TLinux联盟
三,操作符A8TLinux联盟
TCSH有一系列标准的赋值,算术和关系运算以及重定向和后台操作等函数A8TLinux联盟
赋值运算符 功能说明A8TLinux联盟
= 赋值操作A8TLinux联盟
+= 先加再赋值A8TLinux联盟
-= 先减再赋值A8TLinux联盟
*= 先乘再赋值A8TLinux联盟
/= 先除再赋值A8TLinux联盟
%= 取余再赋值A8TLinux联盟
++ 自增量1A8TLinux联盟
-- 自减量1A8TLinux联盟
算术运算符 说明A8TLinux联盟
- 负号A8TLinux联盟
+ 加法A8TLinux联盟
- 减法A8TLinux联盟
* 乘法A8TLinux联盟
/ 除法A8TLinux联盟
% 取余A8TLinux联盟
关系运算符 说明A8TLinux联盟
> 大于A8TLinux联盟
< 小于A8TLinux联盟
>= 大于等于A8TLinux联盟
<= 小于等于A8TLinux联盟
!= 不等于A8TLinux联盟
== 等于A8TLinux联盟
重定向和管道符A8TLinux联盟
TCSH支持标准输入和标准输出的重定向和管道操作.如果设置了noclobber特征,要用A8TLinux联盟
重定向操作重写当前文件,需要用符号>!代替>A8TLinux联盟
A8TLinux联盟
四,控制结构A8TLinux联盟
同其他shell一样,TCSH也有一系列的控制结构控制脚本的命令的执行.while和if控A8TLinux联盟
制结构是最常用的控制结构.switch和foreach是更专用的控制结构.switch是if条件A8TLinux联盟
的限定形式,检查数值是否等于一系列可能的数值中的一个数值.foreach是循环结构A8TLinux联盟
的限定形式.浏览数值列表,给变量赋新的数值.A8TLinux联盟
TCSH不同的控制结构列表:A8TLinux联盟
A8TLinux联盟
条件控制结构; 功能A8TLinux联盟
if (expression) thenA8TLinux联盟
   commandsA8TLinux联盟
endifA8TLinux联盟
A8TLinux联盟
if (expression) thenA8TLinux联盟
   command1A8TLinux联盟
elseA8TLinux联盟
   command2A8TLinux联盟
endifA8TLinux联盟
A8TLinux联盟
switch (string)A8TLinux联盟
        case pattern:A8TLinux联盟
              commandsA8TLinux联盟
              breakswA8TLinux联盟
        default:A8TLinux联盟
               commandsA8TLinux联盟
endswA8TLinux联盟
A8TLinux联盟
循环控制结构: 功能A8TLinux联盟
while (expression) A8TLinux联盟
       commands A8TLinux联盟
endA8TLinux联盟
A8TLinux联盟
foreach variable (argument-list)A8TLinux联盟
        commandsA8TLinux联盟
end A8TLinux联盟
A8TLinux联盟
TCSH中的控制结构有别于其他的shell,因为它更接近编程语言(C).TCSH的条件表达A8TLinux联盟
式的值为true/false.BASH和TCSH主要区别在于TCSH的结构不可重定向或进行管道A8TLinux联盟
输出.A8TLinux联盟
A8TLinux联盟
五,测试表达式;()A8TLinux联盟
if和while控制结构把表达式用作测试.表达式测试的结果为非零(1)表示真,而零A8TLinux联盟
(0)表示假(跟BASH相反).测试表达式可由算术/字符串比较,但是字符串只能作相A8TLinux联盟
等和不相等的比较.而且表达式必须要在()括号内.A8TLinux联盟
如:A8TLinux联盟
if (expression) thenA8TLinux联盟
commandA8TLinux联盟
endifA8TLinux联盟
TCSH有一系列的运算符来分别对字符串进行测试比较.正则表达式可以包含shell脚本的A8TLinux联盟
指令的字符串.如:A8TLinux联盟
if ( $var =~[Hh]* ) then #如果变量$var以字母是大写/小写Hh开头,的字符串A8TLinux联盟
echo information #执行命令A8TLinux联盟
endif #结束A8TLinux联盟
有很多测试文件的操作与BASH完全相同.如:A8TLinux联盟
if ( -r myfile ) then #测试myfile是否可读A8TLinux联盟
echo infoA8TLinux联盟
endifA8TLinux联盟
A8TLinux联盟
测试表达式的基本操作:A8TLinux联盟
字符串比较: 功能A8TLinux联盟
== 是否相等,若相等返回真A8TLinux联盟
!= 是否不等,若不等返回真A8TLinux联盟
=~ 字符串和模式进行测试是否相等(模式为任意正则表达式)A8TLinux联盟
!~ 字符串和模式测试是否不等(模式为任意正则表达式)A8TLinux联盟
文件测试: 功能A8TLinux联盟
-e 测试文件是否存在A8TLinux联盟
-r 测试文件是否可读A8TLinux联盟
-w 测试文件是否可写A8TLinux联盟
-x 测试文件是否可执行A8TLinux联盟
-d 测试文件名是否为目录A8TLinux联盟
-f 测试文件是否为普通文件A8TLinux联盟
-o 测试文件是否被用户所拥有A8TLinux联盟
-z 测试文件是否为空A8TLinux联盟
逻辑运算符: 功能A8TLinux联盟
&& 与运算,两个条件同时蛮族A8TLinux联盟
|| 或运算,有一个条件满足A8TLinux联盟
! 取反A8TLinux联盟
A8TLinux联盟
六,TCSH内建命令A8TLinux联盟
1,数字变量:@A8TLinux联盟
在TCSH中,用@命令代替set命令来声明数字变量,然后进行算术,关系和位操作,数字和A8TLinux联盟
字符串变量是两个不同的对象,需要用不同的方法管理,不能把set用于数值变量的设置A8TLinux联盟
@命令由关键词,变量名,赋值运算符和表达式构成.如:A8TLinux联盟
%@ num=10 #注意空格A8TLinux联盟
%@ sum=2 * ($num + 3)A8TLinux联盟
%echo $sumA8TLinux联盟
%26A8TLinux联盟
A8TLinux联盟
2,aliasA8TLinux联盟
格式:alias [name[command]]A8TLinux联盟
关键词alias 别名name 引用的命令commandA8TLinux联盟
如:A8TLinux联盟
alias list lsA8TLinux联盟
alias list 'ls -l'A8TLinux联盟
A8TLinux联盟
3,argvA8TLinux联盟
当脚本被执行时,命令行中的单词被分析并放入argv数组中.argv[0],argv[1]...A8TLinux联盟
argv[n],其中argv[0]保存命令名,argv[1]保存命令的第一个参数,argv[n]命令的A8TLinux联盟
第n个参数.argv数组元素可缩写元素号码,前面加$.如:$argv[1]写为$1.$argv A8TLinux联盟
A8TLinux联盟
A8TLinux联盟
写为$*.#argv参数标识符包含输入在命令行中的参数号码,可检查$#argv变量.如:A8TLinux联盟
arglistA8TLinux联盟
#A8TLinux联盟
echo "The number of arguments entered is $#argv"A8TLinux联盟
echo "The list of arguments is : $argv A8TLinux联盟
"A8TLinux联盟
A8TLinux联盟
%tcsh arglist a b cA8TLinux联盟
The number of arguments entered is 3A8TLinux联盟
The list of arguments is : a b cA8TLinux联盟
argv变量列表:A8TLinux联盟
命令行参数 说明A8TLinux联盟
$argv[0]或$0 命令名A8TLinux联盟
$argv[n]或$n 从1($1-$)开始的第n个命令行参数A8TLinux联盟
$argv A8TLinux联盟
或$* 从1开始的所有命令行参数A8TLinux联盟
$#argv或$# 命令行参数的计数A8TLinux联盟
A8TLinux联盟
4,bgA8TLinux联盟
格式:bg [%job]A8TLinux联盟
bg命令把指定的任务放入后台.如果此任务已经停止,则继续执行,如果没有参数,将A8TLinux联盟
当前任务放入后台.(详细用法与BASH相同此处略)A8TLinux联盟
A8TLinux联盟
5,breakA8TLinux联盟
格式:breakA8TLinux联盟
break命令用于退出最接近的foreach/while循环过程.执行同一行中其他的命令.A8TLinux联盟
A8TLinux联盟
6,breakswA8TLinux联盟
格式:breakswA8TLinux联盟
可以从switch语句处中断,在endsw后继续执行.A8TLinux联盟
A8TLinux联盟
7,builtinsA8TLinux联盟
列出全部shell的内建命令表.A8TLinux联盟
A8TLinux联盟
8,cdA8TLinux联盟
格式:cd [-p][-l][-nl -v][name]A8TLinux联盟
如果给出目录名,此命令把name设置为当前目录,如果命令中没有name,当前目录自动A8TLinux联盟
设置成用户主目录.用于name的"-"引用上一级目录,如果参数name没有给出子目录,A8TLinux联盟
或不是全路径,或使用./或../引用当前目录及父目录,那么就检查在cdpath shell变量A8TLinux联盟
中列出的目录来寻找该目录名.如果此操作失败,将检查shell变量中是否保存着的目录A8TLinux联盟
路径名.A8TLinux联盟
用-p选项,linux显示目录列表, 用-l,-n,-v选项与用在dirs命令中的选项完全相同.A8TLinux联盟
默认选项-p.A8TLinux联盟
A8TLinux联盟
9,continueA8TLinux联盟
此命令继续执行最靠近while/foreach语句.当前行其余的命令被执行.A8TLinux联盟
A8TLinux联盟
10,dirsA8TLinux联盟
格式:dirs [-l][-n|-v]A8TLinux联盟
dirs -S|-L [filename]A8TLinux联盟
dir -cA8TLinux联盟
如果不带参数,dirs将显示目录列表,列表开头被列在作侧,第一个目录是当前目录.A8TLinux联盟
带-l选项,用户主目录中的全部子目录被展开,输入项在到达屏幕边缘时,-n选项隐藏A8TLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
分页:[1] 2 3
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息