Bash机制和特性

bash机制特性

shell:外壳

GUI:Gnome、KDE、Xfce

CLI:sh(bsh)、csh、ksh、bash(born again,大部分Linux默认的shell)、zsh

用户登录后,shell启动

root,student

程序有一个,进程或许有多个

Linux允许一个用户同时登录多次,打开了多个shell进程,每一次登录都是一个独立的进程

进程:在每个进程开来,当前主机只存在内核与当前进程

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

用户工作环境:

bash:

#

$

父shell,子shell:在shell中继续打开shell,可使用pstree查看,使用exut退出shell

父shell与子shell相互独立

shell --shell --shell

bash --bash


bash:

1、支持命令历史,命令补全

2、支持管道与重定向

3、命令别名

4、命令行编辑

5、命令行展开

6、文件名通配

7、支持使用变量

8、支持编程(shell脚本)


命令行编辑

支持在命令行实现光标快速跳转

Ctrl+a:跳到命令行首

Ctrl+e:跳到命令行尾

Ctrl+u:删除光标位置至行首

Ctrl+k:删除光标位置至行尾

Ctrl+L:清屏


命令历史

bash自动记录之前执行的命令,保存在一段缓冲区中

使用上下箭头可以逐条翻看

history:查看命令历史

-c:清空当前历史命令;

-a:将历史命令缓冲区中命令写入历史命令文件中;

-r:将历史命令文件中的命令读入当前历史命令缓冲区;

-w:将当前历史命令缓冲区命令写入历史命令文件中。

-d [offset][n]:删除offset所在位置后的n个历史命令

bash.history(隐藏文件):进程结束,自动保存缓冲区的历史命令 可以使用ls -a 查看

环境变量

PATH:命令搜索路径

HISTSIZE:保存历史命令缓冲区的大小 RedHad系列默认保存1000条历史命令

命令历史执行技巧

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

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

!! :执行上一条命令

!string :执行命令历史中最近一条以指定字符串(string)开始的命令

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

Esc(松开后)+ .:引用前一个命令的最后一个参数

Alt+.:引用前一个命令的最后一个参数


命令补全:

机制:在命令搜索路径下查找

PATH设置正常

给定的命令开头的字符串唯一

Tab

按两下Tab:显示以给定字符串开头的所有命令

PATH补全

用法与命令补全相似

机制:在给定的打头路径下查找


命令别名

alias CMDALIAS=CMAMAND [options] [arguments]

alias

用来设置指令的别名。

使用alias时,用户必须使用单引号''将原来的命令引起来,防止特殊字符导致错误。

alias命令的作用只局限于该次登入的操作(当前shell的生命周期中有效);别名的有效范围为当前shell进程

若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc中。

例子:

alias 'cls'='clear'

不加参数的alias:打印已经设置的命令别名

-p:打印已经设置的命令别名

要删除一个别名,可以使用 unalias 命令,如 unalias 'clear'。

\CMD:使用命令本身


命令替换

$(COMMAND), `COMMAND`(反引号)

把某个命令或者某个命令中的子命令替换为其执行的结果的过程称为命令替换

例子:

[zeak@localhost Desktop]$ echo "The current directory is $(pwd). "

The current directory is /home/zeak/Desktop.

创建文件 file-2016-09-0-29-21-42.txt

date +%F-%H-%M-%S 显示时间

%F xx-xx-xx 年月日 %H 显示小时 %M 显示分钟 %S 显示秒

命令

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

bash 支持的引号有三种

` `(反引号):命令替换

" "(双引号):弱引用,可以实现变量替换

' '(单引号):强引用,不完成变量替换


文件名通配,globbing

符号:* ? []

* :可以匹配任意长度的字符,长度可以为0

?:匹配任意单个字符

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

[a-zA-Z]*[1-9] [abc] [a-z] [0-9] [0-9a-zA-Z]

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

[^1-9]

字符集

[:space:]:所有的空白字符

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

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

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

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

[:digit:]:所有数字

[:alnum:]:所有数字与大小写字母

例子:

ls [[:digit:]]* 显示所有以数字开头的文件

#man 7 glob 可以查看字符集说明

创建带空格的文件

touch 'a b'

匹配字母开头,中间有空白字符,末尾是字母的的文件名

[[:alpha:]]*[[:space:]]*[[:alpha:]]

显示所有以数字结尾且文件名中不包含空白的文件

需要正则表达式

显示文件名中包含了非字符或者数字的特殊符号的文件

ls *[^[:alnum:]]*

results for ""

    No results matching ""