龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

TCSH shell 编程入门

时间:2011-03-20 22:37来源:未知 作者:admin 点击:
分享到:
简介 TCSH shell不同于其他的shell,因为控制结构更符合程序设计语言的格式.例如 TCSH 的test条件的控制结构是表达式,而不是linux命令,得到的值是逻辑值true 或false,TCSH的表达式与C语言中的表

  简介

  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=$ 大于

  = 大于等于

  !代替>

  

  四,控制结构

  同其他shell一样,TCSH也有一系列的控制结构控制脚本的命令的执行.while和if控

  制结构是最常用的控制结构.switch和foreach是更专用的控制结构.switch是if条件

  的限定形式,检查数值是否等于一系列可能的数值中的一个数值.foreach是循环结构

  的限定形式.浏览数值列表,给变量赋新的数值.

  TCSH不同的控制结构列表:

  

  条件控制结构; 功能

  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

  

  循环控制结构: 功能

  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

  

  测试表达式的基本操作:

  字符串比较: 功能

  == 是否相等,若相等返回真

  != 是否不等,若不等返回真

  =~ 字符串和模式进行测试是否相等(模式为任意正则表达式)

  !~ 字符串和模式测试是否不等(模式为任意正则表达式)

  文件测试: 功能

  -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选项隐藏

  输入项,-v选项显示每一行的输入项入口,-c选项将清除目录列表,-S选项可以把目录

  列表作为一系列的cd和pushed命令保存在文件中,-L选项可以从指定的文件中将cd

  和pushed命令读入,该文件包含-S选项所存储的cd和pushed命令.如果没有指定的文件

  名,将使用赋值到dirsfile shell变量中的文

精彩图集

赞助商链接