1、什么是shell

    用户工作环境:shell;所谓shell,就是提供用户交互的一个接口,它是一个特殊的应用程序。


2、shell的种类

    GUI:

Gnone

KDE

XFce

    CLI:

        sh,csh,ksh,bash,tcsh,ksh,zsh


shell应该什么时候被启动?

如果一个系统同时登录两个用户,他们的shell是同一个吗?进程两个,程序一个。

允许一个用户同时登录多次。

进程:在每个进程看来,当前主机上只存在内核和当前进程。

进程是程序的副本,进程还是程序执行的实例


3、为什么要学习bash

    因为bash遵循开源协定,自由免费,是大多数Linux系统的默认shell,况且学会了bash,就可以从很大程度上学会了其他shell;


4、bash支持的功能类型有:

1、命令历史

2、管道、重定向

3、命令别名

4、命令行编辑

5、命令行展开

6、文件名通配

7、使用变量

8、编程(shell脚本)


5、详解bash支持的各个功能:


5.1命令历史:

什么是命令历史:

    常用Linux的人都知道,通过向上和向下箭头我们可以实现对从前使用过的命令进行再次使用。由于遵循局部性原理,操作系统会将我们过去使用过的命令保存在内存的缓冲区中,方便再一次的调用。同时,也保存在用户家目录下的一个叫.bash_history的隐藏文件中;

    

    内存缓冲区默认存放1000条历史命令,可以手动指定,使用echo $HISTSIZE查看

    环境变量:

PATH:命令搜索路径

HISTSIZE:命令历史缓冲区大小,如何查看变量HISTSIZE:echo $HISTSIZE

    

查看命令历史:history

        history -c               删除整个命令历史

history -d OFFSET [n]       指定删除偏移

history -d 500       删除第500个命令历史

history -d 500 10     删除第500个命令及其以后的10个命令历史

history -w       保存缓冲区的命令历史至历史文件bash_history中


命令历史使用技巧:

!n:执行命令历史的第n条命令

!-n:执行命令历史的倒数第n条命令

!!:执行上一条命令

!string:执行命令历史中,最近一次以该字符串开始的命令

!$ :快速引用上一个命令的最后一个参数

Esc .:快速引用上一个命令的最后一个参数

Alt+.:快速引用上一个命令的最后一个参数,远程终端不支持


5.2  命令行编辑

    

支持命令行上的光标快速跳转

如:ccat /etc/fstab /etc/rc.d发现命令首部多了一个c

    ctrl + a:光标快速跳转到行首

    ctrl + e:光标快速跳转到行尾

    ctrl + u: 删除光标至命令行首的内容

    ctrl + k: 删除光标至命令行尾的内容

    ctrl + l:清屏



5.3  命令补全:

搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,一次tab补全;如果多于一个,两次tab,可以给出列表,否则将直接补全

    PATH:在PATH下查找


路径补全:

    在打头路径或当前路径下查找


5.4  命令别名:

    alias 'CMDALIAS=COMMAND [option] [argument]'

    在shell中定义的别名,仅在当前shell生命周期中有效,别名的有效范围为当前的shell进程

    当命令有别名时,要使用命令本身时使用/COMMAND

        unalias CMDALIAS:撤销别名


5.5  命令替换:

    $(COMMAND),反引号 `COMMAND`(反引号就是在波浪线下面的符号,而不是单引号)

    把命令中某个子命令其执行结果的过程

    例如:创建以当前时间为文件名的文件:

    touch file-$(date +%F-%H-%M-%S).txt


5.6  bash支持的引号:

    ``:命令替换

    "":弱引用,可以实现变量替换

    '':强引用,不完成变量替换


5.7  文件名通配:globbing        man 7 glob

*:任意长度的任意字符

?:任意单个字符

[]:匹配指定范围内的任意单个字符

[a-zA-Z][0-9]

[[:space:]]:空白字符

[[:punct:]]:标点符号

[[:lower:]]:小写字母

[[:upper:]]:大写字母

[[:alpha:]]:大小写字母

[[:digit:]]:数字

[[:alnum]] :数字和字母

[^]:匹配指定范围之外


6、练习:

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