shell是离用户最近的一个程序,也是用户直接链入计算机的外壳,shell分为GUI、CLI两种,CUI里面有gnome、KDE、Xfce,shell里面有sh、bash、csh、ksh、zsh、tcsh。这次我们讲bash,讲之前得先弄清楚进程与程序的关系,在每个进程看来,当前主机上只存在内核和当前进程,进程是程序的副本,进程是程序执行实例。当执行bash进程,在bash里在执行一个bash进程,子bash所拥有的特性,父bash可能不可拥有,反过来也是。
bash特性
- 命令历史、命令补全
- 管道、重定向
- 命令别名
- 命令行编辑
- 命令行展开
- 文件名通配
- 变量
- 编程
命令行编辑(光标跳转)
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Crtl+d:
Ctrl+u: 删除光标至命令行首的内容
Ctrl+k: 删除光标至命令行尾的内容
Ctrl+l: 清屏
ctrl+左右箭头:按单词转跳
命令历史
-c:清空命令历史
-d OFFSET [n]: 删除指定位置的命令
-w:保存命令历史至历史文件中
命令默认显示1000行,可以配置环境变量,改变命令缓存的条数。可以使用echo `$HISTSIZE`查看,要修改变量可以直接修改。
命令历史的使用技巧
!n:执行命令历史中的第n条命令
!-n:执行命令历史中的倒数第n条命令
!!: 执行上一条命令
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数
命令补全/路径补全:Tab健
命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列
表;否则将直接补全;
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;
命令别名
上面的命令可以解除csl=clear,在内置命令前加\,也可以执行同样的功能
命令替换
bash支持的引号
``: 命令替换
"": 弱引用,可以实现变量替换
'': 强引用,不完成变量替换
文件名通配
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]: 大写字母
[:alpha:]: 大小写字母
[:digit:]: 数字
[:alnum:]: 数字和大小写字母
[^]: 匹配指定范围之外的任意单个字符