shbang行: shbang行是脚本的第一行,通知内核使用哪种shell解释脚本中的行。由散列符号(#)、bang(!)和shell的完整路劲组成。
#! /bin/csh #! /bin/tcsh
注释: 符号#后接描述性说明组成,可从行的任意位置开始,到行尾结束。
通配符: 也称作shell元字符,这些字符既非数字也非字母,具备特殊意义。 *、?、[]常用于文件名扩展 ’ ! 是历史命令符 <、>、>>、<&和 | 符号则用于标准I/O重定向和管道 这些字符必须用反斜杠或引号进行引用。
rm *; ls ??; cat file [1 -3 ]; ! !
echo "How are you?"
echo Oh boy \!
显示输出: echo命令用于向屏幕显示输出。通配符必须使用反斜杠和配对引号进行转义。
echo "Hello to you\!"
局部变量: 局部变量的作用域被限定在当前shell中。当一个脚本执行结束或者shell退出后,它们不再可用。即:超出了作用域。可以创建局部变量并为其赋值。
set variable_name = value
set name = "Tom Jones"
全局变量: 全局变量又称环境变量。它们再当前运行的shell中创建,可由该shell派生得任意进程使用。一旦脚本结束或者定义该全局变量得shell退出,它将超出作用域。
setenv VARIABLE_NAME value
setenv PRINTER Shakespeare
echo $variable_name
echo $name
echo $PRINTER
读取用户输入 特殊变量$<从用户输入中读取一行并将它赋给一个变量。
echo "What is your name?"
set name = $<
参数 可以从命令行传递参数给脚本,有两种方法可以在脚本中得到它们的值:位置参量和argv数组。
% scriptname arg1 arg2 arg3 ...
echo $1 $2 $3
echo $*
echo $argv [1 ] $argv [2 ] $argv [3 ]
echo $argv [*]
echo $#argv
数组 数组是用空格隔开的一列词组成的词表,由一对圆括号括起来。内置的shift命令将词表左数第一个单词移开。与C语言不同的是,使用索引访问数组中的某个单词,索引值从1开始,而不是从0开始。
set word_list = ( word1 word2 word3 )
set name = ( Tom Dick Harry Fred )
shift names
echo $word_list (1 )
echo $word_list (2 )
echo $word_list or $word_list (*)
echo $names [1 ]
echo $names [2 ]
echo $names [3 ]
echo $names or echo $names [*]
命令替换 将UNIX/Linux命令的输出赋给一个变量,或者在字符串中使用某个命令的输出,命令由反引号引起来。
set variable_name='command'
echo $variable_name
set now = 'date'
echo $now
echo "Today is 'date'"
算术运算 保存算术运算结果的变量必须以一个@符号加一个空格开头。
@ n = 5 + 5
echo $n
#等式运算符
#关系运算符
> 大于
>= 大于等于
< 小于
<= 小于等于
#逻辑运算符
&& 与
|| 或
! 非
条件语句 if结构后跟着一个用括号括起来的表达式。运算符类似于C运算符,关键字then放在闭括号之后。if必须由endif结束。if/else if 等价于switch语句。
#if 结构
if ( expression ) then
block of statements
endif
#if /else 结构
if ( expression ) then
block of statements
else
block of statements
endif
#if /else /else if 结构
if ( expression ) then
block of statements
else if ( expression ) then
block of statements
else if ( expression ) then
block of statements
endif
#switch结构
switch variable_name
case constant1:
statements
case constant2:
statements
case constants3:
statements
default :
statements
endsw
swtich ("$color" )
case blue:
echo $color is blue
breaksw
case green:
echo $color if red or orange
breaksw
default :
echo "Not a valid color"
endsw
循环语句 有两种类型的循环,while循环和foreach训话。 while循环后哦跟着一个用圆括号括起来的表达式,一个语句段,最后以关键字end结束,只要表达式为真,循环将会一直持续。 foreach循环后跟着一个变量,一个用圆括号括起来的词表,一个语句段,最后以关键字end结束。foreach循环遍历词表,对每个词进行处理后将其移开,然后继续处理下一个词,当词表中所有词都被移走后,循环结束。 循环控制命令为break和continue。
while ( expression )
block of statements
end
foreach variable ( word list )
block of statements
end
foreach color (red green blue)
echo $color
end
文件测试 C shell 有一个内置的选项集可以用来测试文件属性,例如文件是否是目录文件、普通文件(不是目录)、可读文件等。使用UNIX test命令还可以进行其他类型的文件测试。使用方法参见范例。
-r 当前用户可以读该文件
-w 当前用户可以写该文件
-x 当前用户可以执行该文件
-e 该文件存在
-o 该文件属于当前用户
-z 该文件长度为0
-d 该文件是一个目录
-f 该文件是一个普通文件
1 if ( -e file ) then
echo file exists
endif
2 if ( -d file ) then
echo file is a directory
endif
3 if ( ! -s file ) then
echo file is not of zero length
endif
4 if ( -r file && -w file ) then
echo file is readable and writable
endif