bash特性

一、命令历史

    概念:shell进程能够将之前执行过的命令保存记录下来

    存储位置:

        1、命令历史的文件

            使用以下环境变量查看相关参数:

                HISTFILE:查看文件地址(一般为.bash_histroty)    

               bash特性clipboard.png

                HISTFILESIZE:命令历史文件的大小

               clipboard2.png

        2、当前shell进程中,相当于内存缓存吧

            使用以下环境变量查看相关参数:

                HISTSIZE:可保留命令的历史的条数

               

    查看命令历史:~] history

        用法:

            history [-c] [-d 偏移量] [n]

            或 history -anrw [文件名]

            或 history -ps 参数 [参数…]

            -c:清空命令历史

            -d offset:删除指定命令历史

            -r : 从文件读取命令历史追加至历史文件中

            -w:把历史列表中的命令追加至历史文件中

            histroy #:显示最近的#条命令

           clipboard3.png

            

    调用历史列表中的命令:

        !#:再一次执行历史列表中的第#条命令;

        !!:再一次执行上一条命令,也可以用向上箭头;

        !STRING:再一次执行命令历史列表最近一个以STRING开头的命令;

            注意:命令的重复执行有时候需要依赖于幂等性(个人通俗理解,就是多次执行的结果都一样)

    有时候需要重复使用上一条命令的最后一个参数:

        快捷键:ESC,.(先按以下ESC,松开后紧接着按下.)

        或输入字符串 !$ 即可代替上一条命令的最后一个参数

    命令记录的一个特性:

        是否记录重复,是否记录空白字符开头的

        使用环境变量HISTCONTROL控制

            1、ignoredups:忽略重复

            2、ignorespace:忽略空白字符开头的

            3、ignoreboth:两者都忽略

二、命令补全

    为了提高用户的体验,能够简单准确地调用命令,当用户输入命令的部分字符时,可以敲tab建,shell会把已输入的字符作为开头去匹配命令,如果匹配到就补全这个命令。如果匹配到了多个或没有匹配到则不显示,这时候则可以再敲一次tab键,如果有匹配到多个,就会列出匹配到的命令以供选择。如果没有匹配到,则依然不显示。

    

    路径补全,同命令补全。

   clipboard5.png

三、命令行展开

    命令行展开是针对于命令中需要输入多个路径时的一种合并简单写法

    

    ~:此符合作为路径时会自动展开(替换)为用户家目录,或指定用户家目录

    {}:大括号里以逗号分隔的多项字符,会分别与大括号左后的内容进行拼接成多个路径;

        例如:/tmp/{a,b}/d 会展开为两个路径:/tmp/a/d /tmp/b/d

   clipboard6.png       

 

四:命令执行状态结果

    每条命令的执行结果都有一个对应的状态码,也成为退出码

        0:成功

        1-255:表示不同的失败

        

        深入说明参考:

        http://teliute.org/linux/abs-3.9.1/exitcodes.html

        

    

    有的命令正常执行,也会返回一些执行结果。

        返回结果,跟返回码的区别

            返回码只是命令的执行成功与否。

            结果是状态执行完毕产生的一些数据输出。

       

    用特殊变量 $? 可以查看上一条执行命令的返回码。

    clipboard7.png

    执行结果的引用:

        $(COMMAND)

        `COMMAND`    

   clipboard8.png

    

五、快捷键

    Ctrl+a:跳转到命令行的行首

    Ctrl+e:跳转到命令行的行尾

    Ctrl+u:删除光标位置到行首之间的字符

    Ctrl+k:删除光标位置到行尾之间的字符

    Ctrl+l:清屏

六、globbing(文件名通配,匹配的整体,也就是完全符合通配符)

    匹配模式:元字符

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

        ?:匹配任意单个字符

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

            下面是几种特殊格式,他们代表某类字符组:

            1、[a-z],[A-Z],[0-9],[a-z0-9]

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

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

            4、[[:alpha:]]:所有字母

            5、[[:digit:]]:所有数字

            6、[[:alnum:]]:所有数字和字母

            7、[[:space:]]:所有空白字符

            8、[[:punct:]]:所有标点字符

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

            如:[^[:upper:]]所有非大写字母

    clipboard9.png

七、IO重定向

    每个程序的执行都有输入数据和输出数据,程序的数据流有三种:

        (1)、输入的数据流:<– 标准输入(stdin), 数据来源:键盘;

        (2)、输出的数据流:–> 标准输出(stdout),数据去向:显示器;

        (3)、错误的输出流:–> 错误输出(stderr),数据去向:显示器;

    (一)、IO

        概念:输入输出

        [一]、输入 input

            设备:文件、键盘、网卡等;

        [二]、输出 output

            设备:文件、显示器、网卡、打印机等;

    (二)、重定向:也就是改变数据流的来源或去向。

        [一]、多个命令时管道链接数据流入流出

            概念: 

                链接命令,将前一个程序执行的结果直接定向到后一个程序当做输入数据流

            用法:

                COMMAND1 | COMMAND2 | COMMAND3 | …

        clipboard10.png

            特殊用法:

                tee命令:

                    经常用在两个管道之间,将输入的数据接收保存到文件中,并把输入数据再次原样接力输出。

                tee /PATH/TO/SOMEFILE

           clipboard11.png

            

        [二]、三种数据流分别对应的重定向方式:

            █  标准输出:

                > /PATH/TO/SOMEFILE

                >> /PATH/TO/SOMEFILE                 

                区别:是否覆盖已存在的文件,> 覆盖文件,>> 追加文件中

                可以设置是否允许覆盖

                    set -C: 不允许 > 覆盖,但仍然可以用 :> 强行覆盖

                    set +C: 关闭上述特性

            clipboard12.png   

            █  错误输出:

                2> /PATH/TO/SOMEFILE

                2>> /PATH/TO/SOMEFILE

               clipboard13.png

            

                合并以上两种输出到一个目标文件:

                    (1)、&>, &>>

                    (2)、

                        COMMAND > /path/to/somefile 2>&1

                        COMMAND >> /path/to/somefile 2>&1

               clipboard14.png

            clipboard15.png

                    

        

            █  输入:

                <

                    通常用在一些被动接收输入数据的命令上。如tr、cut等。

               clipboard16.png      

                Here Document: 

                    << 文档输入模式,定义一个起始和结束符。例如以下在定义的特殊字符EOF后可以随意输入,所以换行,直到出现最后一行EOF字符结束输入

                        cat << EOF

                        cat /PATH/TO/SOMEFILE << EOF

               clipboard17.png     

八、命令hash

    概念:

        之前介绍过shell执行命令调用时,会在环境变量PATH所保存的目录下依次查找对应二进制程序。找到并调用之,但是每次查找会耗时,为了减轻耗时,会把调用过的命令缓存起来,加速命令调用。

    存储格式:

        键值对:比如你使用了次命令ls,那么会存一条: ls –> /usr/bin/ls

    查看方法:

        hash:默认列出存储的hash值,

            -l,列出详细信息

            -d COMMAND :删除某条命令的缓存

            -r:清空

    clipboard18.png

九、bash的变量

    概念:

        个人有编程经验,暂时不做解释

    变量类型:

        bash按个人理解应该属于弱类型变量,bash会把所有变量统统视为字符串;

        既然是弱类型,无需声明,直接赋值使用即可。

    变量名规则与规范:

        只能包含数字、字母、下划线

        不能以数字开头

        不能使用编程语言的自身保留字

        最好见名知义,明确表明变量所代表的意义

    变量替换:

        把命令中引用的变量,替换为对应内存空间上的数据。

       clipboard19.png 

    作用范围:

        本地变量:作用域为当前shell进程

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

        局部变量:作用于为代码片段(比如函数内的变量)

        特殊变量:shell内置具有特殊功能的变量

            $?:前面说过,表示命令执行返回状态码。

        注意:bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境

            PATH, HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD

    变量声明:

        name=value

            默认为本地变量,在函数体内声明就是局部变量(纯属个人猜测),如需设为环境变量,需要导出为全局变量。

            声明为环境变量:

                (1)、export name=value

                (2)、name=value

                     export name

                (3)、declare -x name=value

                (4)、name=value

                     declare -x name

    变量引用:

        ${var_name}    当引用有歧义时,可用大括号表明

        $var_name

       clipboard20.png

    查看变量:(列出当前shell可用变量,并非引用)

        查看所有变量

            set

        查看环境变量

            export, declare -x, printenv, env

    撤销变量:

        unset name

    只读变量: 

            (1) declare -r name=value

            (2) readonly name=value

            只读变量无法重新赋值,并且不能撤销,声明周期为当前shell的生命周期,随shell的终止而终止。

十、多命令执行

    (一)、按顺序执行

        COMMAND1; COMMAND2; COMMAND3; …

    (二)、逻辑控制执行

        COMMAND1 && COMMAND2

        COMMAND1 || COMMAND2

十一、bash的配置文件

    配置文件的意义:

        命令行中定义的特性,例如变量和别名作用域为当前shell生命期;那么配置文件定义的特性只对以后新启动的shell都有效。

    修改配置文件,立即对当前shell生效

        1、通过命令行重新定义一次

        2、让shell重新读取配置文件

            ~] source /PATH/FROM/CONF_FILE

            ~] . /PATH/FROM/CONF_FILE

    按登录类型分:

        ■ profile类:为交互式登录的shell提供配置

            交互式登录:

                1、直接通过某终端输入账号密码登录后打开的shell进程

                2、使用su命令:su – USERNAME或 su -l USERNAME 执行的登陆切换。

            功用:

                1、用于定义环境变量

                2、运行命令或脚本

            作用范围:

                1、全局:对所有用户都生效;

                    /etc/profile

                    /etc/profile.d/*.sh

                2、用户个人:对当前用户有效

                    ~/.bash_profile

                 clipboard21.png

             clipboard22.png

                 

        ■ bashrc类:为非交互式登录的shell进程提供配置

            非交互式登录:

                1、su USERNAME执行的命令切换

                2、图形界面下打开的终端

                3、运行脚本

            功用:

                1、定义本地变量

                2、定义命令别名

            作用范围:

                1、全局

                    /etc/bashrc

                用户个人:

                    ~/.bashrc

        注意:只有管理员可以修改全局配置

    交互式登录shell进程加载配置文件的过程:

        /etc/profile –> /etc/profile.d/* –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

    非交互式登录shell进程加载配置文件的过程:

        ~/.bashrc –> /etc/bashrc –> /etc/profile.d/*

原创文章,作者:小江,如若转载,请注明出处:http://www.178linux.com/38876

(0)
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相关推荐

  • Linux文件查找命令

      Linux系统文件查找     使用linux系统难免会忘记文件所在的位置,可以使用以下命令对系统中的文件进行搜索。 locate命令:     locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。L…

    Linux干货 2016-11-28
  • 硬链接与软链接

    1、关于硬链接和软链接是什么   硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。通过剖析硬链接与软链接的联系与区别,我们可更好的了解 Linux 中 VFS 这一通用文件模型。 (1…

    Linux干货 2016-10-20
  • Linux文件查找之find秘笈

    前言     Linux的基本特点之一是一切皆文件,在系统管理过程中难免会需要查找特定类型的文件,那么问题来了:如何进行有效且准确的查找呢?本文将对Linux系统中的文件查找工具及用法进行详细讲解。 常用工具对比     常用的文件查找工具主要有locate(非实时查找)和find(实时查找)。locate查找依赖于索…

    2015-03-23
  • 文件管理命令及通配符练习

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例 按增删改查的思路来 增: touch filename:这个命令本身不是用来新建文件的,它是用来修改文件的时间属性,不过默认情况时当filename不存在时,它会默认建立一个空文件 mkdir: 常用参数 -p:相当于递归创建目录 -v:显示出创建过程中的信息 cp : 常用参数 -r:…

    Linux干货 2016-11-06
  • httpd协议配置进阶

    目录 虚拟主机配置 status状态页面 curl命令 mod_deflate模块 https配置 httpd自带应用程序 虚拟主机配置 有三种实现方案:    基于IP:        为每个虚拟主机准备至少一个IP地址    基于端口:     &nbsp…

    Linux干货 2016-10-31