一.bash及其特性

  1.bash: 

      a、命令历史、命令补全

      b、管道、重定向

      c、命令别名

      d、命令行编辑

      e、命令行展开

      f、文件名通配

      g、变量

      h、编程

  2.命令行编辑

      光标跳转:

     Ctrl+a:跳到命令行首

     Ctrl+e:跳到命令行尾

     Ctrl+u: 删除光标至命令行首的内容

     Ctrl+k: 删除光标至命令行尾的内容

     Ctrl+l: 清屏

  3.命令历史:

      查看命令历史:history

        -c:清空所有命令历史

        -d OFFSET [n]: 删除指定位置的命令

        -w:保存命令历史至历史文件中

      用户正常退出命令历史会自动写入到当前用户的家目录下的.bash_history隐藏文件中

  4.环境变量:

      PATH: 命令搜索路径

      HISTSIZE:命令历史缓冲区大小

  5.命令历史的使用技巧:

     !n:执行命令历史中的第n条命令;

     !-n:执行命令历史中的倒数第n条命令; 

     !!: 执行上一条命令;

     !string:执行命令历史中最近一个以指定字符串开头的命令

     !$:引用前一个命令的最后一个参数; 

  6.命令补全:

     a.按一下tab 键补全唯一的命令(在PATH环境变量路径下搜索)

     c.按两下tab 键查看以相同字符开头的所有命令

  7.命令别名:

     a.alias命令用来自定义别名命令,别名只在当前shell的生命周期中有效

      用法:alias cls=clear 如果值有空格那么最好加上单引号

     问题:如何使别名在所有shell进程中有效,需要修改配置文件

     b.使用alias命令直接查看所有的别名命令

     c.unalias 命令撤销指定的命令别名

  8.命令替换: $(pwd)

     把命令中的子命令替换成子命令的执行结果

     问题:创建一个文件,文件名为当前时间格式

        touch $(date +%F-%H-%M-%S).txt

     用反引号 touch `date +%F-%H-%M-%S`.txt 与上面的作用一样

     双引号:弱引用,可以实现变量的替换

     单引号:强引用,不完成变量的替换

  9.文件名通配---查找指定的文件: ls 要匹配的通配

     *: 任意长度的任意字符

     ?:任意单个字符

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

      [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]

      [:space:]:所有空白字符集合 [[:space:]]:所有空白字符中德任意一个

      [:punct:]:标点符号

      [:lower:]:小写字母

      [:upper:]: 大写字母

      [:alpha:]: 大小写字母

      [:digit:]: 数字

      [:alnum:]: 数字和大小写字母

      问题:空白字符可不可以当作文件的组成

          可以 touch 'a b'

      用 man 7 glob 命令获取字符集说明

      问题:

         a.显示所有以a或m开头的文件

           ls [am]*

         b.显示所有文件名中包含了数字的文件

           ls *[0-9]* 

           ls *[[:digit:]]*

         c.显示文件名中包含了非字母或数字的特殊符号的文件

           ls *[^[:alnum:]]*