Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124913
  • 博文数量: 23
  • 博客积分: 560
  • 博客等级: 中士
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-07 22:58
文章分类

全部博文(23)

文章存档

2012年(6)

2011年(17)

分类: LINUX

2011-04-13 15:01:46

#! 命令解释器 当然"#!"也可以被忽略,不过这样你的脚本文件就只能是一些命令的集合,不能够使用 shell 内建的指令,如果在脚本的里边还有一个#!行,那么 bash 将把它

认为是一个一般的注释行。

#   注释,行首以#开头为注释(#!是个例外).  注释也可以存在于本行命令的后边. 
注意:命令是不能跟在同一行上注释的后边的,没有办法,在同一行上,注释的后边想要再使用命令,只能另起一行.
当然,在 echo 命令中被转义的#是不能作为注释的. 同样的,#也可以出现在特定的参数替换结构中或者是数字常量表达式中. 
标准的引用和转义字符("'\)可以用来转义#

;   命令分隔符,可以用来在一行中来写多个命令.

;;   终止"case"选项.

.   .命令等价于 source命令(见 Example 11-20).这是一个 bash 的内建命令.

.   .作为文件名的一部分.如果作为文件名的前缀的话,那么这个文件将成为隐藏文件.

.   .字符匹配,这是作为正则表达是的一部分,用来匹配任何的单个字符.

"   部分引用."STRING"阻止了一部分特殊字符,

'   全引用. 'STRING' 阻止了全部特殊字符

,   逗号链接了一系列的算术操作,虽然里边所有的内容都被运行了,但只有最后一项被返回.

\   转义字符

/   文件名路径分隔符.或用来做除法操作.

`   后置引用,命令替换,

:   空命令,等价于"NOP"(no op,一个什么也不干的命令).也可以被认为与 shell 的内建命令(true)作用相同.":"命令是一个 bash 的内建命令,它的返回值为 0,就是 shell

返回的 true. 
    占位符:在一个 2 元命令中提供一个占位符.
    "变量扩展/子串替换" :在和 > (重定向操作符)结合使用时,把一个文件截断到 0 长度,没有修改它的权限. 如果文件在之前并不存在,那么就创建它.如:
    : > data.xxx  #文件"data.xxx"现在被清空了. 
    ":"还用来在/etc/passwd 和$PATH 变量中用来做分隔符.

!   取反操作符,将反转"退出状态"结果,(见 Example 6-2).也会反转test 操作符的意义.比如修改=为!=.!操作是 Bash 的一个关键字.

*   万能匹配字符,用于文件名匹配(这个东西有个专有名词叫 file globbing),或者是正则表达式中.注意:在正则表达式匹配中的作用和在文件名匹配中的作用是不同的. 
*   数学乘法. 
**  是幂运算.

?   测试操作.在一个确定的表达式中,用?来测试结果.
    (())结构可以用来做数学计算或者是写 c 代码,那?就是 c 语言的 3元操作符的一个. 
    在"参数替换"中,?测试一个变量是否被 set 了. 
    在 file globbing中和在正则表达式中一样匹配任意的单个字符.

$   变量替换
$   在正则表达式中作为行结束符. 
${}   参数替换,
$*,$@  位置参数 
$?   退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态. 
$$   进程 ID 变量.这个$$变量保存运行脚本进程 ID

()   命令组 
   注意:在()中的命令列表,将作为一个子 shell 来运行. 
   在()中的变量,由于是在子 shell 中,所以对于脚本剩下的部分是不可用的. 
   如: 
    1 a=123 
    2 ( a=321; )        
    3 echo "a = $a"      # a = 123 
    用在数组初始化,如: 
    1 Array=(element1,element2,element3)

{xxx,yyy,zzz...}  大括号扩展,如: 
                1 cat {file1,file2,file3} > combined_file 
                2 # 把 file1,file2,file3 连接在一起,并且重定向到 combined_file中. 
                3  
                4  
                5 cp file22.{txt,backup} 
                6 # 拷贝"file22.txt" 到"file22.backup"中
    一个命令可能会对大括号中的以逗号分割的文件列表起作用[1]. file globbing将对大括号中的文件名作扩展. 
    注意: 在大括号中,不允许有空白,除非这个空白是有意义的. 
    echo {file1,file2}\ :{\ A," B",' C'} 
    file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

{}   代码块.又被称为内部组.事实上,这个结构创建了一个匿名的函数.但是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的.
  如
          bash$  
              { 
            local a; 
            a= 123; 
               } 
           bash 中的 local 申请的变量只能够用在函数中.

未完待续

阅读(1446) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~