`
weitao1026
  • 浏览: 1052749 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Csh的基本语法介绍

 
阅读更多

在*unix系统中,常用的shell有sh,bash,csh/tcsh, ksh.

sh来自于systemV的Unix,是传统的Unix的shell,直到现在很多的系统管理员仍然喜欢使用sh。
bash来自于BSD Unix,语法非常类似于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。

复制代码 代码如下:

set x = 5
echo $x
echo ${x}kg
echo $%x  

 

全局变量的定义setenv v  value 该变量将被此shell派生的所有子shell继承。

$$表示当前进程的PID, $status 或 $? 表示退出状态。

2)数组

定义数组myarr, 通过$myarr[index]来访问数组中的值,注意index是从1开始的。通过$myarr或$myarr[*]来访问数组所有的元素。通过$#myarr来查看元素的个数。

复制代码 代码如下:

set myarr = (str1, str2,str3)
echo $myarr[2]
echo $myarr
echo $myarr[*]

 

3)命令替换

通过set x = `cmd`来执行命令,且结果赋值给变量。

复制代码 代码如下:

set d = `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)从键盘读取并保存到变量中

复制代码 代码如下:

set var = $<

 

8)算术

复制代码 代码如下:

@ var = 5 + 5
echo $var
@ v2 = $var + 3
echo $v2

 

9)代字符号扩展

~username 表示username的home目录。

10)别名

alias m more 为more创建别名m。
alias 列出所有的alias。
unalias m 用来删除more的alias定义。

11)初始化文件

.login 在登录时执行的文件。
.cshrc 在每次调用shell时都执行的文件。

12) label 和 goto

csh中没有函数的概念,使用类似windows批处理中的label和goto。

复制代码 代码如下:

goto label
......
label:
....

 

13) if/else/switch/case

复制代码 代码如下:

if(expression)then
  commands
endif
 

 

if {(command)} then
  commands
endif
 

if(expression) then
  commands
else if(expression) then
  commands
else
  commands
endif
 

switch("$value")
case pattern1:
  commands
  breaksw
case pattern2:
  commands
  breaksw
default:
  commands
  breaksw
endsw

 

14 while/foreach

复制代码 代码如下:

while(expression)
  commands
  continue

 

  break

end
foreach var (wordlist)
  commands
end

 

15、repeat

repeat表示重复执行后面的命令。

复制代码 代码如下:

repeat 3 "echo helloworld"

 

16、csh中设置环境变量PATH的方法

csh中使用path代替PATH,设置类似于数组的使用。

复制代码 代码如下:

set path = ($path /home)
echo $path
echo $PATH

 

17、source等价于其他shell中的.

source使得程序在当前的shell中被执行,而不是派生子进程来执行。

18、转义字符与单双引号

引号必须成对出现,而且必须在同一行上配对。可以用反斜杠来转义换行符,这样就能在下一行配对了。
单引号可用于保护双引号,双引号也可以用来保护单引号。
单引号保护除历史字符(!)之外的所有元字符不被解释。
双引号保护除历史字符(!),变量替换字符($)和反引号(用于命令替换)之外的所有元字符,使其不被解释。

19、历史command

history用来查看command执行的历史。
!!用来执行上一条命令。

20、pushd和popd用来维护目录栈

21、csh -vx用来显示输入的原样和变量替换后的脚本,用来帮助调试。

22、在脚本中处理中断

复制代码 代码如下:

onintr finish
  <script continues here>
 
finish:
onintr - # Disable further interrupts
echo Cleaning temp files
exit 1

 

onintr 命令后跟一个标号名,finish是用户自定义的标号。如果发生中断,控制将被转移到finish标号。通常该行位于脚本的开头。除非当程序正在执行时按ctrl+C(中断键),此时控制将被转移到该标号。onintr - 表示屏蔽所有的中断,此时按下ctrl+C将会被忽略。 

23、noclobber 禁止覆盖变量,设定 $noclobber 预设变量改变输出重定向特性.    

变量设定语法 set noclobber

取消变量设定语法 unset noclobber

这个 noclobber 变量,它的功能便是停止重定向符号“>”的覆盖(overwiting)已存在文件以及符号“>>”要将字符写入一个不存在的文件时,自动产生该文件的特性。

仅用两个例子让读者明白,设定后的实际使用状况。 

例子一:

复制代码 代码如下:

% ps axu > testfile
% set noclobber
% echo "test set noclobber" > testfile
testfile: File exists.
% echo "test set noclobber" >! testfile
%

 

例子二:

复制代码 代码如下:

% set noclobber
% cat /etc/passwd >> nopass
nopass: No such file or directory
% cat /etc/passwd >>! nopass
%
分享到:
评论

相关推荐

    第六章(_CSH_语法介绍_).pdf

    ### CSH语法介绍 #### 一、CSH简介 CSH,全称为C Shell,是Bill Joy在Berkeley UNIX系统中开发的一种增强型Shell。它不仅继承了Bourne Shell的基本功能,还引入了许多新特性,包括工作控制、指令历程、指令别名...

    genesis2000脚本简单的csh语法讲解.pdf

    Genesis2000脚本简单的csh语法讲解 Genesis2000脚本简单的csh语法讲解是一份详细的教程,涵盖了csh语法的基础知识点。本文档从变量、数字运算、数组、特殊变量、执行命令、流程控制等方面详细讲解了csh语法的使用...

    csh脚本语法实例

    与bash Shell相比,csh在语法上有所不同,但基本的功能和用途相似。本文将根据提供的csh脚本示例详细解析其语法特点及用法。 #### 基础语法结构 csh 脚本通常以 `#!/bin/csh` 开头,这称为shebang行,告诉系统使用...

    genesis2000脚本简单讲解csh语法

    本文将对 C Shell 的基本语法进行简介,涵盖变数、数字运算、阵列、特殊变数、执行命令、流程控制等方面。 一、变数 在 C Shell 中,变数可以是字串变数或数字变数。设定变数值时不能使用 Bourne Shell 的方式,而...

    UG后处理开发用-TCL基本语法与指令

    UG后处理开发中,TCL(Tool Command Language)是一种常用的语言工具,它的基本语法和指令是实现自动化和定制化操作的关键。TCL以其简洁的语法规则和强大的功能,成为了编程领域中的一个实用脚本语言。 一、TCL简介...

    csh,tcsh,bash,sh等shell的区别

    不同的 Shell 提供了不同的特性和功能,本文将详细介绍 csh、tcsh、bash 和 sh 这几种 Shell 的区别。 #### sh (Bourne Shell) - **起源**:sh 最早由 Stephen Bourne 在 1978 年为 Unix 第七版开发。 - **特点**...

    OS + Linux Shell bash / sh / ksh / csh / tcsh / adb shell

    在提供的压缩包文件中,"bash.doc"可能是关于bash Shell编程的文档,详细介绍了bash的基本语法、命令、环境变量和高级特性。而"basic_shell_programming[1].pdf"可能包含基本的Shell脚本编程教程,适合初学者入门。 ...

    input_tgz_csh_tgz_怎么导入Tgz_genesis_

    接下来,我们来看"Csh",即CShell,是Unix和类Unix系统中的一种命令行解释器,提供了与Bash shell不同的语法和功能。在处理自动化任务,如批处理脚本时,CShell因其强大的循环和条件控制结构而被广泛使用。 当我们...

    UNIX&Linux环境与基本命令介绍

    ### UNIX & Linux环境与基本命令介绍 #### 一、UNIX & Linux概述 ##### 1. UNIX简介 UNIX 是一个强大的多用户、多任务操作系统,它支持多种处理器架构,并且按照操作系统的分类,属于分时操作系统。自1969年由AT&T...

    C shell编程初步

    8. **变量扩展**:csh支持多种变量扩展语法,如${var}、$[expr]等。 9. **特殊字符**:csh使用了一些特殊字符来表示特定的命令或功能,例如`!`用于表示历史命令、`&`用于表示后台运行等。 10. **错误处理**:csh...

    12.doc

    例如,在 csh 中,赋值表达式的语法是 `set variable=value`,而在 sh 中,等号两侧不允许有空格。 - **变量声明与引用**:在 csh 中,如果引用了一个未声明的变量(即没有赋值的变量),csh 会给出错误消息;而在 ...

    Object-C 基础语法中文版

    ### Object-C 基础语法...本教程仅提供了 Objective-C 基础语法的简要介绍,更深入的学习资料和实践案例可以在官方文档和相关书籍中找到。此外,Objective-C 社区也非常活跃,可以通过参与社区讨论来获取帮助和支持。

    shell编程的语法规则

    ### Shell编程的语法规则详解 #### 一、Shell编程概览 Shell是连接用户与操作系统的桥梁,尤其是在Unix及类Unix系统(如Linux)中...通过本文的介绍,希望能帮助读者对Shell编程有一个全面的认识,并激发学习兴趣。

    Bash的特性介绍BashInfo

    函数定义的基本语法如下: ```bash function my_function { # 函数体 } ``` ##### 5. 脚本编程 Bash支持丰富的脚本编程功能,包括条件判断、循环控制、数组处理等高级特性,这些都使得Bash脚本成为自动化...

    Csh

    1. **基本语法**:C#语法与C++和Java有很强的相似性,包括类、对象、方法、变量等概念。它支持基本数据类型如int、float、double,也提供了字符串类型string。 2. **面向对象**:C#是完全面向对象的,支持封装、...

    shell编程实例解析,shell基础语法详解

    14. **Bourne、Korn、C 三种Shell的区别**:尽管这些Shell的基本语法相似,但它们之间仍存在细微差别: - **Bourne Shell** (`sh`):最初的标准Shell,适用于所有版本的Unix系统。 - **Korn Shell** (`ksh`):结合...

Global site tag (gtag.js) - Google Analytics