bash特性

简介:

shell:外壳(是用户能直接操作系统资源的入口)

shell一般分两种:

    图形界面GUI:gnome,kde,xfce

    命令行界面CLI:sh、csh、ksh、bash、tcsh、zsh


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

进程是运行中的程序,程序只有一个但是进程却可以有多个

    

shell和子shell:

    当我们登录成功时,系统会给我们一个shell,如果我们在这个shell里面执行bash、csh等命令,系统会为我们打开一个新的shell,随之我们便切换到那个子shell,可以用exit退出,用pstree,可以了解到这个过程  

示例:

[root@logstach ~]# bash

[root@logstach ~]# pstree

init─┬─crond

     ├─6*[mingetty]

     ├─rsyslogd───5*[{rsyslogd}]

     ├─sshd───sshd───bash───bash───pstree

     └─udevd───udevd

[root@logstach ~]# exit

exit

[root@logstach ~]# pstree

init─┬─crond

     ├─6*[mingetty]

     ├─rsyslogd───5*[{rsyslogd}]

     ├─sshd───sshd───bash───pstree

     └─udevd───udevd

[root@logstach ~]# 


bash的特性:

1、命令历史

2、管道、重定向

3、命令别名

4、命令行编辑器

5、命令行展开

6、文件名通配

7、变量

8、编程


命令行编辑:

    光标跳转:

        ctrl+a:跳到行首

        ctrl+e:跳到行尾

        ctrl+u:删除光标到行首的内容

        ctrl+k:删除光标到行尾的内容

        ctrl+l:清屏


命令历史:

查看命令历史:history

        -c:清空命令历史

        -d OFFSET [N]:删除指定位置历史命令

        -w:保存命令历史到历史文件(用户家目录里面隐藏文件.bash_history)中


环境变量

    PATH:命令搜索路径

    HISTSIZE:命令历史缓冲区大小


命令历史的使用技巧:

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

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

!!:执行第n条

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

!$或者Esc+ . :引用前一个命令的最后一个参数


命令补全:

    当你输入一个命令的前几个字符时候,如果这几个字符可以确认命令的唯一性那么嗯tab键的时候会自动补齐命令,如果不能则显示以这几个字符开头的所有可能命令。

示例:

[root@logstach ~]# pw

pwck      pwconv    pwd       pwdx      pwunconv  

[root@logstach ~]# pwc

pwck    pwconv  

[root@logstach ~]# pwconv 


路径补全:

    类似于命令补全,不同的是,命令补全是在PATH这个环境变量所指定的路径中查找命令,而路径则是在指定的路径中找相关的目录或文件。

    

命令别名:

alias CMDALIAS=‘COMMAND  [options] [arguments]'

    在shell中定义的别名仅在当前shell生命周期中有效,当shell进程挂掉的时候,alias也随之失效。要想永久生效,可以写入到shell配置文件中。

    当别名与命令名称相同的时候,可以是用\CMD使用原来的命令

    当想取消别名,就用unalia  CMSALIAS


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

    $(COMMAND)或者反引号`COMMAND`

示例:

    创建一个当前文件,并命名为类似file-2015-12-21-16-54.txt的格式,2015-12-21-16-54代表2015.12.21  16:54

    touch  file-`date +%Y-%m-%d-%H-%M`.txt

或  touch  file-$(date +%Y-%m-%d-%H-%M).txt

    

bash 支持的引号:

``:命令替换

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

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


文件名通配:

*:通配任意长度、任意字符

?:通配指定任意字符中的一个

[]:通配指定字符中的一个

    [a-z]、[0-9]...

    [:space:]:空白字符

    [:punct:]:标点符号

    [:digit:]:数字

    [:lower:]:小写字母

    [:upper:]:大写字母

    [:alpha:]:大小写字母

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

        其他的可以man  7 glob

[^]:除了指定字符外的任意一个

    

示例:

    当我们想用特殊字符作为文件名的时候,可以使用‘ ’来实现这一过程

[root@logstach tmp]# touch  'a b'

[root@logstach tmp]# ls

a b

[root@logstach tmp]# 

     当我们想查找某一个包含某种特性的文件的时候,我们可以采用文件名通配来提高查找效率,比如:

    在/tmp/路径下,包含各式各样的文件,我们想显示一个以字母开头,以数字结尾的文件,可以这样显示:

[root@logstach tmp]# ls

14ahhs1  25  534  71233bbc  a  a b  kkll568  sadsa*787sdd

[root@logstach tmp]# ls  [a-zA-Z]*[0-9]

kkll568

也可以这样:

[root@logstach tmp]# ls [[:alpha:]]*[0-9]

kkll568

注:在使用[:space:]这类通配符的时候必须使用两个[],像这样:[[:alpha:]]

    如果我们想显示以字母开头和结尾,中间包含空格的文件,可以这样:

[root@logstach tmp]# ls  [a-zA-Z]*[[:space:]]*[a-zA-Z]

a b


    但是这类文件名通配符有它的局限性,比如下面的要求就做不到:

    显示所有以数字结尾,并且文件名中不包含空格的文件。
















本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1727616 ,如需转载请自行联系原作者

相关文章
|
Shell Linux
bash及其特性
shell:外壳 GUI:GNOME,KDE,Xfce CLI:sh,csh,ksh,bash,tcsh,zsh 程序,进程 允许一个用户登录多次 进程:在每一个进程看来,当前主机上只存在内核和当前进程 进程是程序的副本,进程是程序执行的...
999 0
|
存储 关系型数据库 Shell
|
存储 缓存 Linux
|
关系型数据库 Shell 应用服务中间件