bash的特性
Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell。事实上,还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用
bash是大多数Linux系统以及Mac OS X默认的shell,它能运行于大多数类Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现Windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
bash特性之一:命令别名
获取当前用户可用的别名的定义:
# alias
定义别名:
# alias NAME='COMMAND'
生命周期:当前shell进程;
# unalias NAME
撤消别名:
bash的特性之二:命令历史
shell进程会保存其会话中用户曾经执行过的命令;命令通过其“历史文件”来持久保存此前执行过的命令;每个用户都有其自己专用的历史文件;
HISTSIZE:shell进程的缓冲区保留的历史命令的条数;
HISTFILESIZE:命令历史文件可保存的历史命令的条数;
默认均为1000;
1 # echo $HISTSIZE
2 1000
3 # echo $HISTFILESIZE
4 1000
HISTFILE:当前用户的命令历史文件;
~/.bash_history
查看命令历史列表:
1 # history
命令用法:
history -c:清空命令历史;
history -d OFFSET:删除指定的条目;
1 # history -d 156
-a 将当前缓冲的历史行追加到历史文件中
-n 从历史文件中读取所有未被读取的行
-r 读取历史文件并将内容追加到历史列表中
调用命令历史列表中的命令以重执行之目的:
!#:再一次执行历史列表中的第#条命令;
1 # history
2 ....
3 72 cat test
4 73 history
5 # !72
6 cat test
7 Hello World
!!:再一次执行上一条命令;
1 # cat test
2 Hello World
3 # !!
4 cat test
5 Hello World
!STRING:再一次执行命令历史列表中最近一个以指定的STRING开头的命令;
1 # !cat
2 cat test
3 Hello World
调用上一条命令的最后一个参数:
快捷键:ESC, .
Alt+.
!$:给出的字符组合
显示最近的n条件命令历史:
history #控制命令历史的记录方式:
通过HISTCONTROL环境变量进行,其取值:
ignoredups:忽略重复的命令;重复是指连续且相同的令;
ignorespace:以空白字符开头的命令不记入历史;
ignoreboth:上述两者同时生效;
修改变量值的方式:
NAME='VALUE'
1 # echo $HISTCONTROL
2 ignoredups
3 # HISTCONTROL="ignoreboth"
4 # echo $HISTCONTROL
5 ignoreboth
bash特性之三:快捷键
Ctrl+a:跳至命令行首;
Ctrl+e:跳至命令行尾;
Ctrl+k:删除光标所在处至尾部的内容;
Ctrl+u:删除行首至光标所在处的内容;
bash的特性之四:命令补全和路径补全
命令补全:
shell程序在接收到用户执行命令的请求且分析完成之后,最左侧字符串将被当作命令去查找;
查找机制:
(1) 查找内部命令;
(2) 查找外部命令:
1、去$PATH变量所指定的各路径下,自左而右逐个搜索各目录下的文件名;2、给定的打头的字符串如果能惟一标识某命令程序文件的文件名,则直接补全;3、不能惟一标识,再击tab可给列表;4、错误:没有任何命令可被此打头字符串标识;
路径补全:
在给定的起始路径的上级目录下,以对应路径下的打头字符串来逐一匹配上级目标下的每个文件:
惟一标识:tab补全;
不能惟一标识:tab, tab给出列表;
错误路径:没有响应;
bash的特性之五:命令行展开:
把命令行的给定的特殊符号自动替换为相应字符串的机制;
~: 自动替换为用户家目录;
~USERNAME:自动替换为指定用户的家目录;
{}:可承载一个以逗号分隔的路径列表,能够将其展开为多个独立路径;
例如:
/tmp/{a,b,c} /tmp/a /tmp/b /tmp/c
/tmp/{a,b}/z /tmp/a/z /tmp/b/z
1 # cd ~
2 # pwd
3 /root
4 # cd ~testuser
5 testuser]# pwd
6 /home/testuser
bash特性之六:命令的执行状态结果:
命令的正常输出结果:命令的返回值;
通过引用来保存下来或直接调用——“命令引用”
'COMMAND'
$(COMMAND)
1 # ls -ld 'pwd'
命令的执行状态结果:
成功:0
失败:1-255
1 # echo "Helllo World"
2 Helllo World
3 # echo $?
4 0
5 # echoa "Hello World"
6 -bash: echoa: command not found
7 # echo $?
8 127
bash用一个特殊变量来保存最一次执行的命令的状态结果:
$?
bash中的引用:
'':强引用
"":弱引用
“:命令引用
1 # echo '$PATH'
2 $PATH
3 # echo "$PATH"
4 /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin5 :/usr/bin:/root/bin
6 # echo 'pwd'
7 /home/testuser
bash的特性之七:glob
glob:文件名通配;快速引用多个文件;文件名整体匹配度检测;
元字符:基于元字符可编写匹配模式(pattern);
*:匹配任意长度的任意字符;
p,pa,,p,pa
p*:pa, p
?:匹配任意单个字符;
p?, p?a, p??
p??: pa, pad,
[ ]:匹配指定集合内的任意单个字符;
[a-z], [A-Z]:不区分字符大小写;
[0-9]
[a-z0-9][[:upper:]]:所有大写字母;[[:lower:]]:所有小写字母; [[:digit:]]:所有的数字;[[:alpha:]]:所有字母;[[:alnum:]]:所有字母和数字;[[:space:]]:空白字符;[[:punct:]]:标点符号;
{FNXX==XXFN}:匹配指定集合外的任意单个字符;