概述

  在前面部分,我们学习了bash的一些基础特性,现在我们继续学习bash的基础特性,在部分中,我们将学习bash的文本通配、快捷键、IO重定向及管道的特性。

bash的基础特性

  (1)glob


   在bash中,支持文本名“通配”的功能,叫做glob机制。

   参数信息:

     *:匹配任意长度的任意字符;

    20150823-Bash的基础特性(2)

     ?:匹配任意单个字符;

    20150823-Bash的基础特性(2)

     []: 匹配指定范围内的任意单个字符;

     20150823-Bash的基础特性(2)  

     [^]:匹配指定范围外的任意单个字符;

     20150823-Bash的基础特性(2)


      []还支持一些专用的字符集合:

        [:lower:] 指定就匹配小写字母

      20150823-Bash的基础特性(2)

        [:upper:] 指定就匹配大写字母

      20150823-Bash的基础特性(2)

        [:alnum:] 所有的字母,包括大小写、数字

      20150823-Bash的基础特性(2)

        [:digit:] 所有数字

      20150823-Bash的基础特性(2)

        [:space:] 所有的空白字符

        [:punct:] 标点符号

      需要将这些内容全部放入中括号中使用。


    练习:

    显示/etc/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录;

   

    复制/etc目录下,所有以.d结尾的文件或目录至/tmp/mageedu.com目录中;

   20150823-Bash的基础特性(2)


  (2)快捷键(组合键)


   在使用bash的时候,可以使用以下快捷键:

     Ctrl+l:清屏

     Ctrl+a: 切换至命令行首

     Ctrl+e:切换至命令行尾

     Ctrl+c:取消命令执行

     Ctrl+u:删除光标所在处至行首的内容;

     Ctrl+k: 删除光标所在处至行尾的内容;



  (3)IO重定向和管道


   程序由指令加数据组成;指令由我们的程序所提供,而数据可能有变量或者是指明的文件路径中的配置文件所提供。所以在执行程序时,程序需要读取数据,对这些数据进行加工,并且在加工完成之后将数据输出。所以一般程序都需要读入数据和输出数据,都有这样的需求。

   所以我们任何一种程序都有输入流和输出流这两种概念,对Linux而言,这个输入流和输出流默认情况下都会有一个标准位置或者默认位置,否则就会有多个位置可以实现读入和多个位置实现输出。另外,Linux下,每一个打开的文件都一个fd:file descriptor【文件描述符】,文件描述符在Windows当中我们通常称之为文件句柄。因为在操作系统当中,内核容易识别的是数字而非文件名。

   标准输入:keyboard,是指键盘,文件描述符通常用0来表示, 设备在/dev/stdin

   标准输出:monitor,指监视器,比如我们的电脑显示屏,文件描述符通常使用1来表示,设备在/dev/stdout; 

   标准错误输出:monitor, 也是使用显示器进行输出,通常文件描述符使用2来表示, 设备在/dev/stderr。

   而所谓的I/O重定向,就是改变这些标准位置的。I/O重定向通常包含输入重定向、输出重定向以及错误重定向。

   输出重定向的使用:

   命令 > 新位置, 

   命令 >> 新位置

   在命令中:

      >:表示覆盖重定向;

      >>:表示追加重定向;

   如果我们使用>不小心把文件覆盖掉,而我们的文件由十分的重要,那么这个命令就会造成破坏性的作用,我们可以使用以下命令安全的使用覆盖重定向的功能:

   set -C

   这个命令并不是禁止使用覆盖重定向,而是指如果覆盖重定向目标文件存在,则禁止执行;而若干目标文件存在,我们也想继续进行覆盖重定向,确认不会造成破坏性给损失,那么我们可以使用: 

   >| 这个符号继续执行覆盖重定向。

   而关闭覆盖重定向功能,使用以下命令即可实现:

   set +C


   错误重定向的使用:

   2>:覆盖

   2>>:追加


   同时重定向标准输出流和错误输出流:

   示例1:COMMAND > /path/to/file.out 2> /path/to/file.err

   示例2:COMMAND > /path/to/file.out 2>&1  标准输出重定向至一个文件,一旦错误,也输出至第一个输出文件位置,即输出都至一个文件。

   示例3:COMMAND &> /path/to/file.out 重定向至同一个文件


   输入重定向使用:

   在特殊命令下才有用。大多数命令自动使用参数来读入输入流。

   输入重定向使用 < 来实现。

   20150823-Bash的基础特性(2)

  

   tr命令:

   作用:tr用来从标准输入中通过替换或删除操作进行字符转换。

   格式:tr [选项]... SET1 [SET2]

   参数:

       -d: 删除字符

   使用说明:使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。

   示例1:字符转换

  20150823-Bash的基础特性(2)

   示例2:删除指定字符

  20150823-Bash的基础特性(2)


   在输入重定向中,<< 作用是生成文档的,把对方输入的内容一次性的保存到某个文件中。

   格式:cat >> /path/to/somefile << EOF  EOF是文档结束标志符

   20150823-Bash的基础特性(2)

  

   管道使用:

   管理是什么?管道就是前一个命令的输出可以用作后一个命令的输入。可以使用管理来组合小程序完成复杂任务。

   管道使用通过 | 符号来实现。

   格式:COMMAND1 | COMMAND2 | ...

   20150823-Bash的基础特性(2)

  

    练习:tee命令的用法;

   tee命令:

   作用:读取标准输入的数据,并将其内容输出成文件。

   格式:tee [选项] 文件

   参数:

     -a或--append  附加到既有文件的后面,而非覆盖它.

     -i-i或--ignore-interrupts  忽略中断信号。

   使用说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

   示例1:和管道结合使用

   20150823-Bash的基础特性(2)