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:]]*