shell:人机交互的接口,将相关命令处理后递交给内核,内核再通过系统调用驱动硬件执行。

shell的分类:

GUI:Gnome,KDE,Xfce

CLI:sh,csh,ksh,bash,tcsh,zsh

程序的概念:

程序是经编译后形成的二进制可执行文件

进程的概念:

进程是程序的副本,是程序执行实例,在每个进程看来,当前主机上只存在内核和当前进程

bash的特性(或者说功能):

1.命令行历史、命令行补全

2.命令行编辑

3.命令别名

4.命令替换

5.文件名通配

6.管道,I/O重定向

7.变量

8.shell编程

1.命令行历史、命令行补全

history:查看命令行历史(记录暂时保存在内存缓冲区)

    -c:清除命令历史

    -d 数字:删除指定位置的命令

    -w:保存命令历史至家目录历史文件(.bash_history)退出登陆时会将内存缓冲区中的命令         行历史写入.bash_history中

命令历史的使用技巧:

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

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

!!:执行上一条命令;

!string:执行命令历史中最近一个以指定字符串开头的命令;

!$:引用前一个命令的最后一个参数;

按Esc键松开后按.和Alt+.:引用前一个命令的最后一个参数

Ctrl+r键:在命令行中搜索命令历史并可按Enter键快速执行

历史命令相关的环境变量:

HISTFILESIZE定义了.bash_history文件中保存的命令条目

HISTSIZE定义了history命令能够显示的最多条目

HISTTIMEFORMAT定义了history命令的时间格式,典型配置是HISTTIMEFORMAT=‘ %F %T ’

命令行补全:

命令补全:搜索PATH环境所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,        按两次Tab键可以给出列表,否则将直接补全唯一命令。

路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全。

2.命令行编辑

常用的组合键:

Ctrl+p:相当于↑键

Ctrl+n:相当与↓键

Ctrl+b:相当于←键

Ctrl+f:相当于→键

Ctrl+e:跳到行尾

Ctrl+a:跳到行首

Ctrl+u:一行中删除光标左边的全部内容

Ctrl+k:一行中删除光标右边(包含光标指定的字符)的全部内容

3.命令别名

alias:直接键入alias显示当前shell下可用的别名

alias STRING=‘CMD [options] [arguments]’

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

ualias STRING:删除别名

若STRING原本为命令, \STRING 表示忽略别名,直接执行原有的STRING

4.命令替换

命令替换是在一个命令中使用另一个命令的输出结果,如COMMAND1 `COMMAND2`

或COMMAND1 $(COMMAND2)

bash支持的引号:

``:反引号,用于命令替换

"":双引号,弱引用,可以实现变量替换,把变量替换成变量的值

'':单引号,强引用,不能实现变量替换

5.文件名通配(globbing)

*:任意长度的任意字符

?:任意单个字符

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

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

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

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

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

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

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

    [[:digit:]]:数字

    [[:alnum:]]:数字和大小写字母

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

6.I/O重定向、管道

常见INPUT设备:键盘、鼠标、硬盘等

常见OUTPUT设备:显示器、音响、硬盘等

系统设定:

    默认输出设备:标准输出,STDOUT,1

    默认输入设备:标准输入,STDIN,0

    标准错误输出:STDERR,2

标准输入:键盘

标准输出和错误输出:显示器

I/O重定向:

>:覆盖输出,将输出转到指定其他地方

>>:追加输出

set -C:禁止对已经存在文件使用覆盖重定向;

    强制覆盖输出,则使用>|

set -C:关闭上述功能

2>:重定向错误输出

2>>:追加方式

&>:重定向标准输出或错误输出至同一个文件

> file_name 2>&1 等价于 &> file_name

<:输入重定向,将原本需要由键盘输入的数据,改由文件内容来替代

例子: cat>catfile<etc/profile

<<:结束的输入符号

管道(pipe):前一个命令的输出,作为后一个命令的输入

COMMAND1 | COMMAND2 | COMMAND3...

例子:cut -d: -f1 | head -1 | id

7.变量

变量:可以理解为命名的内存空间

内存:编址的存储单元

变量类型:事先确定数据的存储格式和长度

    字符

     数值型

        整型

        浮点型

    布尔型

bash变量分类:

    环境变量:作用域为当前shell进程及其子进程

        export VARNAME=VALUE

        VARNAME=VALUE

        export VARNAME

    本地变量:作用域为整个bash进程

        set VARNAME=VALUE

    局部变量:作用域为当前代码段

        local VARNAME=VALUE

    位置变量:shell编程时,传递的参数,在.sh文件中第一个参数可表示为$1,第二个为$2...

    特殊变量:

        $?:上一个命令的执行状态返代码(0-255)

            0:正确执行

            1-255:错误执行,1、2、127系统预留

变量操作

撤销标量:unset VARNAME

查看当前shell中的所有变量:set

查看当前shell中的环境变量:

    printenv

    env

    export