SHELL的语法和结构

  • shbang行:
    shbang行是脚本的第一行,通知内核使用哪种shell解释脚本中的行。由散列符号(#)、bang(!)和shell的完整路劲组成。
#! /bin/csh    #! /bin/tcsh
  • 注释:
    符号#后接描述性说明组成,可从行的任意位置开始,到行尾结束。
 # This is a comment.
  • 通配符:
    也称作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      #arg1赋给$1,arg2赋给$2等等
echo $*            #所有参数
#使用argv数组:
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          #将Tom从词表中去掉
echo $word_list(1)   #显示词表中的第1个元素
echo $word_list(2)   #显示词表中的第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'    #反引号中的命令被执行,其输出赋给变量now
echo $now
echo "Today is 'date'"  #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 该文件是一个普通文件
#范例
#!/bin/csh -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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值