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);

   *:匹配任意长度的任意字符;

,pap,

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}:匹配指定集合外的任意单个字符;