第四章、bash特性详解
03_02_base特性详解
bash及其特性:
shell: 外壳
GUI:Gnome, KDE, Xfce
CLI: sh, csh, ksh, bash, tcsh, zsh
Linux允许同一个用户登录多次
root, student
程序:进程
进程:在每个进程看来,当前主机上只存在内核和当前进程
进程是程序的副本,进程是程序执行实例
用户工作环境:
bash:
#
$
shell,子shell
bash--bash
bash:
1、命令历史、命令补全
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、变量
8、编程
命令行编辑:
光标跳转:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 删除光标至命令行首的内容
Ctrl+k: 删除光标至命令行尾的内容
Ctrl+l: 清屏
命令历史:
查看命令历史:history
-c:清空命令历史
-d OFFSET [n]: 删除指定位置的命令
-w:保存命令历史至历史文件中
环境变量
PATH:命令搜索路径
HISTSIZE: 命令历史缓冲区大小
命令历史的使用技巧:推荐一篇文章《让效率翻倍的Bash技巧》
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
Esc, .:引用前一个命令的最后一个参数;
Alt+.
命令补全: tab
搜索环境变量PATH记录的路径。
路径补全:tab
文本相关的命令
查看:cat, tac, more, less, head, tail
统计:wc
处理:tr, cut, join
排序:sort
uniq
03_03_base特性详解
复习:
bash特性:
命令行编辑:
命令历史:
history -c -w -d
HISTSIZE
~/.bash_history
!n, !-n, !!, !string, !$
命令补全,路径补全
命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;
路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;
命令别名
定义:alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;
取消:unalias CMDALIAS
使用命令本身: \CMD
命令替换: $(COMMAND), 反引号:`COMMAND`
把命令中某个子命令替换为其执行结果的过程
eg:
1. echo "The current directory is $(pwd)."
2. echo "file-$(date +%F-%H-%M-%S)" ------------- file-2013-02-28-14-53-31.txt
%F full date; same as %Y-%m-%d
%H hour (00..23)
%M minute (00..59)
%S second (00..60)
%T time; same as %H:%M:%S
bash支持的引号:
``: 反引号,命令替换
"": 弱引用,可以实现变量替换
'': 强引用,不完成变量替换
文件名通配, globbing
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[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 查看这些内置特殊字符表示
[^]: (脱字符) 匹配指定范围之外的任意单个字符
[[:alpha:]]*[[:space:]]*[[:alpha:]] : 字母开头,字母结尾,中间有空格
练习:
1、创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分;
2、显示所有以a或m开头的文件;
ls [am]*
3、显示所有文件名中包含了数字的文件;
ls *[0-9]*
ls *[[:digit:]]*
4、显示所有以数字结尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9] ????????? -- 正则表达式可以解决
5、显示文件名中包含了非字母或数字的特殊符号的文件;
ls *[^[:alnum:]]*
ls *[^a-zA-Z0-9]*