4.1 bash的特性

  a) 支持命令历史、命令补全

  b) 支持管道、重定向

  c) 支持命令别名

  d) 支持命令行编辑

  e) 支持命令行展开

  f) 支持文件名通配

  g) 支持变量

  h) 支持编程


4.2 bash支持的引号

  ``:命令替换

  "":弱引用,可以实现变量替换

  '':强引用,不完成变量替换


4.3 命令行编辑:

4.3.1 光标跳转

  Ctrl+a:跳到命令行首

  Ctrl+e:跳到命令行尾

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

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

  Ctrl+<--:光标定位到离自己最近的一个单词前面

  Ctrl+l:清屏

4.3.2 命令历史

  history:查看命令历史

    -c:清空命令历史

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

   -w:保存命令历史至历史文件~/.bash_history中

  命令历史的使用技巧:

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

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

    !!:执行上一条命令

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

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

    esc,.:按下esc松开后按.,引用前一个命令的最后一个参数

  控制命令历史的记录方式:

    环境变量:HISTCONTROL

      ignoredups:忽略重复的命令(连续且相同方为“重复”)

      ignorespace:忽略所有以空格开头的命令,如“  ls -l”

      ignoreboth:ignoredups和ignorespace均生效

    修改环境变量HISTCONTROL值的方式:export HISTCONTROL=ignoreboth

4.3.3 命令补全

  搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表,否则将直接补全

4.3.4 路径补全

  搜索我们给出的起始路径下的每个文件名,并试图补全

4.3.5 命令别名    

alias CMDALIAS='COMMAND [options] [arguments]'

  在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围为当前的shell进程。


4.4 命令替换

$(COMMAND)或`COMMAND`

  把命令中某个子命令替换为其执行结果的过程,就叫做命令替换


4.5 文件名通配:globbing

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

  ?:匹配任意单个字符

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

    [abc],[a-m],[0-9]

    [[:space:]]    表示空白字符

    [[:punct:]]    表示标点符号

    [[:lower:]]    表示小写字母

    [[:upper:]]    表示大写字母

    [[:alpha:]]    表示大小写字母

    [[:digit:]]    表示数字

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

    使用man 7 glob命令可以获得以上字符集合的帮助信息!!!

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


4.6 环境变量:

  PATH:命令搜索路径

  HISTSIZE:命令历史缓冲区大小

  SHELL:当前shell

4.6.1 bash内置变量:

  RANDOM:保存着0-32768之间的随机数

  随机数生成器:熵池

    /dev/random:其生成的随机数用尽时会阻塞用户进程,待生成更多的随机数里即恢复,比较安全

    /dev/urandom:其生成的随机数用尽时会通过软件模拟生成更多的随机数进来,不会阻塞用户进程


4.7 命令行展开

  ~:展开为用户的主目录

  ~USERNAME:展开为指定用户的主目录

  {}:可承载一个以逗号分隔的列表,并将其展开为多个路径

    /tmp/{a,b} ==> /tmp/a,/tmp/b


4.8 命令的执行结果状态

  bash使用特殊变量$?保存最近一条命令的执行状态结果

  程序执行以后有两类结果:

    a) 程序的返回值

    b) 程序的执行状态结果

  程序状态返回代码(0-255):

    0:正确执行

    1-255:错误执行,1、2、127系统预留,有特殊意义