Csh的基本语法介绍
在*unix系统中,常用的shell有sh,bash,csh/tcsh,ksh.
sh来自于systemV的Unix,是传统的Unix的shell,直到现在很多的系统管理员仍然喜欢使用sh。
bash来自于BSDUnix,语法非常类似于C语言,所以通常有C/C++编程背景的开发人员最喜欢使用。
ksh是对sh的扩展,且吸收了csh的一些有用的功能,但是由于开始ksh的license是AT&T,所以后来出现了很多的ksh的开源版本,例如mksh,pdksh等。
bash是现在很多Linux的发行版中默认的shell,综合了其他shell的很多优点。
下面描述csh的一些基本的语法(在sh环境中执行csh切换到csh环境):
1)变量
通过set来定义局部变量x,通过$x或${x}来使用变量x的值,$%x表示变量的值的长度,$?x来判断变量x是否设置,如设置则为1,否则为0。
setx=5 echo$x echo${x}kg echo$%x
全局变量的定义setenvv value该变量将被此shell派生的所有子shell继承。
$$表示当前进程的PID,$status或$?表示退出状态。
2)数组
定义数组myarr,通过$myarr[index]来访问数组中的值,注意index是从1开始的。通过$myarr或$myarr[*]来访问数组所有的元素。通过$#myarr来查看元素的个数。
setmyarr=(str1,str2,str3) echo$myarr[2] echo$myarr echo$myarr[*]
3)命令替换
通过setx=`cmd`来执行命令,且结果赋值给变量。
setd=`date` echo$d echo$d[6]-$d[2]-$d[3]
4)命令行参数
通过$argv[1],$argv[2]或$1,$2来访问命令行参数。命令行参数的个数为$#argv。
5)文件名扩展的元字符
只能使用?,*,[abc],[a-c]。
6)IO重定向和管道
将命令的输出重定向到文件为>。
将命令的输出重定向并追加到文件为>>。
将命令的输入重定向到文件为<。
将命令的报错信息重定向到一个文件(cmd>/dev/tty)>&errors。
将命令的输出和错误输出分别重定向(cmd>goodstuff) >&badstuff。
将命令的输出和报错信息重定向到一个文件cmd>&file。
将命令的输出经管道发往另一个命令cmd|cmd.
将命令的输出和报错信息经管道发往另一个命令cmd|&cmd。
条件语句为cmd&&cmd或cmd||cmd。
command<<WORD表示将command的输入重定向为从第一个WORD处开始,到下一个WORD处之间的内容(即here文档)。
7)从键盘读取并保存到变量中
setvar=$<
8)算术
@var=5+5 echo$var @v2=$var+3 echo$v2
9)代字符号扩展
~username表示username的home目录。
10)别名
aliasmmore为more创建别名m。
alias列出所有的alias。
unaliasm用来删除more的alias定义。
11)初始化文件
.login在登录时执行的文件。
.cshrc在每次调用shell时都执行的文件。
12)label和goto
csh中没有函数的概念,使用类似windows批处理中的label和goto。
gotolabel ...... label: ....
13)if/else/switch/case
if(expression)then commands endif
if{(command)}then commands endif
if(expression)then commands elseif(expression)then commands else commands endif
switch("$value") casepattern1: commands breaksw casepattern2: commands breaksw default: commands breaksw endsw