shell命令的组成 之 特殊字符

来源:互联网 发布:双色球精密分析软件 编辑:程序博客网 时间:2024/05/22 12:54

 

1. shell命令的组成  之 特殊字符

   #  注释,行首以#开头为注释(#!是个例外),标准的引用和转义字符("'/)可以用来转义#

         注意: echo ${PATH#*:} # 参数替换,不是一个注释

                echo $(( 2#101011 )) # 数制转换,不是一个注释

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

   ;; 终止"case"选项,相当于C语言中的break.

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

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

      将不被 ls 命令列出.

   . 命令如果作为目录名的一部分的话,那么.表达的是当前目录.".."表示上一级目录.

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

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

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

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

     返回.let "t2 = ((a = 9, 15 / 3))" # Set "a = 9" and "t2 = 15 / 3"

   / 转义字符,如/X 等价于"X"或'X'.

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

   ` 后置引用,命令替换.

   : 空命令,等价于"NOP"(no op,一个什么也不干的命令).也可以被认为与shell 的内建命令

     (true)作用相同.":"命令是一个 bash 的内建命令,它的返回值为0,就是shell 返回的true.

还有其它意思,比较复杂

   ! 取反操作符,将反转"退出状态"结果,(见Example 6-2).也会反转test 操作符的意义.比

     如修改=为!=.!操作是Bash 的一个关键字.

在一个不同的上下文中,!也会出现在"间接变量引用"见Example 9-22.

     在另一种上下文中,!还能反转bash 的"history mechanism"(见附录J 历史命令)

     需要注意的是,在一个脚本中,"history mechanism"是被禁用的.

   * 万能匹配字符,用于文件名匹配(这个东西有个专有名词叫file globbing),或者是正则

     表达式中.注意:在正则表达式匹配中的作用和在文件名匹配中的作用是不同的.

   * 数学乘法.

   **是幂运算.

   ? 测试操作.在一个确定的表达式中,用?来测试结果.

     (())结构可以用来做数学计算或者是写c 代码,那?就是c 语言的3 元操作符的一个.

     在"参数替换"中,?测试一个变量是否被set 了.

   ? 在file globbing 中和在正则表达式中一样匹配任意的单个字符.

   $ 变量替换

   $ 在正则表达式中作为行结束符.

   ${} 参数替换

   $*,$@ 位置参数

   $? 退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态.

   $$ 进程ID 变量.这个$$变量保存运行脚本进程ID

   () 命令组.如: (a=hello;echo $a)

      注意:在()中的命令列表,将作为一个子shell 来运行.

      在()中的变量,由于是在子shell 中,所以对于脚本剩下的部分是不可用的.

   () 用在数组初始化,如: Array=(element1,element2,element3)

   {xxx,yyy,zzz...} 大括号扩展,如:cat {file1,file2,file3} > combined_file

       把file1,file2,file3 连接在一起,并且重定向到combined_file 中.

  一个命令可能会对大括号中的以逗号分割的文件列表起作用[1]. file globbing 将对

     大括号中的文件名作扩展.

     注意: 在大括号中,不允许有空白,除非这个空白是有意义的.

     echo {file1,file2}/ :{/ A," B",' C'}

     file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

{} 代码块.又被称为内部组.事实上,这个结构创建了一个匿名的函数.但是与函数不同的

      是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的.

{} /; 路径名.一般都在find 命令中使用.这不是一个shell 内建命令.

       注意: ";"用来结束find 命令序列的-exec 选项.

[] test.

       test的表达式将在[]中.

       值得注意的是[是shell 内建test 命令的一部分,并不是/usr/bin/test 中的扩展命令

       的一个连接.

[[]] test.

       test表达式放在[[]]中.(shell 关键字)

       具体查看[[]]结构的讨论.

[] 数组元素

       Array[1]=slot_1

       echo ${Array[1]}

    [] 字符范围

       在正则表达式中使用,作为字符匹配的一个范围

(()) 数学计算的扩展.在(())结构中可以使用一些数字计算.

>>,>,< 重定向

    << 重定向,用在"here document"

    <<< 重定向,用在"here string"

    <和> 可用来做字符串比较

    <和> 可用在数学计算比较

/<,/> 正则表达式中的单词边界.如:bash$grep '/<the/>' textfile

| 管道.分析前边命令的输出,并将输出作为后边命令的输入.这是一种产生命令链的好方法.

>| 强制重定向(即使设置了noclobber 选项--就是-C 选项).这将强制的覆盖一个现存文件.

|| 或-逻辑操作.

    & 后台运行命令.一个命令后边跟一个&,将表示在后台运行.

&& 与-逻辑操作.

- 选项,前缀.在所有的命令内如果想使用选项参数的话,前边都要加上"-".

- 用于重定向 stdin 或 stdout.

- 之前工作的目录."cd -"将回到之前的工作目录,具体请参考"$OLDPWD"环境变量.

      注意:一定要和之前讨论的重定向功能分开,但是只能依赖上下文区分.

+ 算术加号,也用在正则表达式中.

    + 选项,对于特定的命令来说使用"+"来打开特定的选项,用"-"来关闭特定的选项.

% 算术取模运算.也用在正则表达式中.

~ home 目录.相当于$HOME 变量.~bozo 是bozo 的home 目录,并且ls ~bozo 将列出其中的

      内容. ~/就是当前用户的home 目录,并且ls ~/将列出其中的内容

~+ 当前工作目录,相当于$PWD 变量.

    ~- 之前的工作目录,相当于$OLDPWD 内部变量.

=~ 用于正则表达式,这个操作将在正则表达式匹配部分讲解,只有version3 才支持.

    ^ 行首,正则表达式中表示行首."^"定位到行首.

 

原创粉丝点击