bash及其特性
shell: 外壳
GUI: Gnome,KDE,Xfce
CLI: sh, csh, ksb, bash, tcsh, ksh, zch
程序: 进程
允许同一个用户登陆多次,互不相干,进程独立
进程: 在每个进程看来,当前主机上只存在内核和当前进程
进程是程序的副本,进程是程序执行的实例
用户工作环境:
#
$
shell, 子shell
bash:
1. 命令历史
2. 管道、重定向
3. 命令别名
4. 命令行编辑
5. 命令行展开
6. 文件名通配
7. 变量
8. 编程
命令行编辑:
ctrl+a: 跳到命令行收
ctrl+e: 跳到命令行尾
ctrl+u: 删除光标至命令行首的内容
ctrl+k: 删除光标至命令行尾的内容
ctrl+l: 清屏
命令历史:
查看命令历史: history
-c: 清空命令历史
-d: OFFSET【n】清除指定行号的命令条数
eg: history 500 删除1-500条记录
eg: history 500 10 删除从第500条到510条记录
-w: 保存命令历史至历史文件中 ~/.bash_history
环境变量
PATH: 命令搜索路径
HISTSIZE: 命令历史缓冲区大小 eg: echo $HISTSIZE
命令历史的使用技巧:
!n : 执行history中的第n条命令
!-n: 执行history中倒数第n条命令
!!: 执行上一条命令
!string: 执行命令历史中最近一个以指定字符串开头的命令
!$: 引用前一个命令的最后一个参数
ESC, . (按ESC松开,点按.) 就可以出现上一个命令的最后一个参数
eg: nano !$
命令补全
路径补全
命令别名
alias CMEALIAS=‘COMMAND [options] [arguments]‘
在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围仅为当前shell进程:
unalias
命令替换 $(COMMAND), 反引号: `COMMAND`
把命令中某个子命令替换为其执行结果的过程
eg: echo "the current directory is $(pwd)"
创建一个 file-$(date +%F-%H-%M-%S).txt
bash支持的引号:
``: 命令替换
"": 弱引用,可以实现变量替换
‘‘: 强引用,不完成变量替换
文件名通配, globbing
* 任意长度的任意字符
? 任意单个字符
[] 匹配指定范围内的任意单个字符
eg: [abc], [a-m],[a-z], [A-Z],[0-9][a-zA-Z],[0-9a-zA-z]
[:space:] 空白字符
[:punct:] 标点符号
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 大小写字母
[:digit:] 数字
[:alnum:] 数字和大小写字母
#man 7 glob 可以查到上述的列表
调用[[:space:]] 所有的空格字符
检测中间有空格的:
[[:alpha:]]*[[:space:]]*[[:alpha:]]
[^] 匹配指定范围之外的任意单个字符
eg: 以为非数字开头的文件 [^0-9]
练习:
1. 创建a123,cd6,c78m,c1 my, m.z, k 67, 8yu, 789等文件: 注意, 以上文件是以逗号隔开的, 其他符号都是文件名的组成部分
2. 显示所有以a或m开头的文件
ls [am]*
3. 显示所有文件名中包含了数字的文件
*[[:digit:]]* 或者 *[0-9]*
4. 显示所有以数字结尾且文件名中不包含空白的文件
*[^[:space:]]*[[:digit:]] 或者 *[[:space:]]*[^0-9]
5. 显示文件名中包含了非字母或数字的特殊符号文件
*[^[:alnum:]]*