bash相关特性

author author     2022-10-30     428

关键词:

    一、bash的快捷键:
        C:Ctrl键;M:Alt键;E:ESC键
        C-l:清屏,相当于clear命令;
        C-a:将光标跳转至命令行编辑模式的行首;
        C-e:将光标跳转至命令行编辑模式的行尾;
        C-k:删除命令行编辑模式的光标所在位置至行尾的内容;
        C-u:删除命令行编辑模式的光标所在位置至行首的内容;
        C-c:结束前台进程;
        M-.:引用上一个命令中的最后一个参数;(在Xshell中不能用)
        E,.:功能同M-.先按ESC再按".",前几个都是同时按下;

    二、命令历史:
        Bash进程会保存其会话中的用户曾经执行过的命令,以方便用户重复执行某个命令操作;
            命令历史包括两个方面:
                1.用户曾经执行过的命令;
                2.用户曾经执行过的命令的路径;

            在Bash中有一个内置的变量“PATH”,PATH变量的值为当前系统中所有的命令的文件所在的路径的集合;

        命令如何被shell执行的?
            bash会将命令行的内容按照空白字符进行切片,分析第一个切片内容:
                1.判断第一个切片的内容是内部命令还是外部命令;
                    如果是内部命令,直接运行;
                    如果是外部命令,先找hash表中的路径缓存,如果有,则直接执行;否则通过查找PATH变量中包含路径中,是否有对应名称的文件;

                    使用hash命令可查看被记住的命令文件的路径;
                    eg: ~]# hash


                    使用history命令查看被记住的命令的命令行参数;
                        history - 显示或操纵历史列表。
                        格式: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...]

                            常用选项:
                                -c:清空历史缓冲区中的命令历史记录;
                                -d OFFSET:删除指定的历史命令条目;

                    重复执行历史缓冲区中的命令:
                        !NUMBER:重复执行历史缓冲区中编号为"NUMBER"的命令;
                        !STRING:重复执行历史缓冲区中以"STRING"开头的最后一次执行过的命令;
                        !?STRING:重复执行历史缓冲区中包含了"STRING"的最后一次执行过的命令;
                        !-NUMBER:重复执行历史缓冲区中倒数第"NUMBER"条命令;
                        使用上、下Arrow可以从历史缓冲区中调用命令;
                        C-r:在历史缓冲区中实施搜索,回车之后执行;

                        !$:在历史缓冲区中调用最后一个命令的最后一个参数;
                        !^:在历史缓冲区中调用最后一个命令的第一个位置的参数;
                        !:NUMBER:在历史缓冲区中调用最后一个命令的第"NUMBER"位置参数
                        !SEQUENCE:NUMBER:历史缓冲区中调用第"SEQUENCE"条命令的第"NUMBER"位置参数

                    在bash中与命令历史相关的内置变量:
                        HISTSIZE:历史缓冲区中能够保存的命令历史的最大条目数量,默认值为1000;
                        HISTFILESIZE:~/.bash_history文件中能够保存的命令历史的最大条目数量,默认值为1000;
                        HISTTIMEFORMAT:在命令历史缓冲区中记录历史命令时,同时记录命令的执行的时间戳标记;可以使用date命令的FORMAT来表示时间的记录格式;默认值为空;
                        HISTCONTROL:控制命令历史的记录方式:
                            ignoredups:连续且相同的命令不会被记录到历史缓冲区;此为默认值;
                            ignorespace:以空白字符开头的命令不会被记录到历史缓冲区;
                            ignoreboth:上述两种情况都不会被记录到历史缓冲区;

    三、命令补全——(TAB键的使用)
        包括两个方面的内容:
            1.构成命令字符串的补全;
                参考PATH变量中的路径,对命令进行补全:
                    如果,给出的字符串在PATH变量对应的路径中是唯一的,则直接补全命令;
                    如果,给出的字符串在PATH变量对应的路径中不唯一,则bash给出提示;

            2.命令中参数所对应的字符串补全;
                根据给出的路径进行补全:
                    如果,给出的字符串在给出的路径中是唯一的,则直接补全参数;
                    如果,给出的字符串在给出的路径中不唯一,则bash给出提示;

    四、命令行展开
        (a+b+c)(d+e+f)=ad+ae+af+bd+be+bf+cd+ce+cf
        1.~展开:
            ~:bash会自动将其展开为当前登录用户的家目录;
            ~STRING:bash会自动将其展开为以"STRING"为用户名的用户的家目录;

            ~+:调用bash的内置变量"PWD"的值;
            ~-:调用bash的内置变量"OLDPWD"的值;

        2.展开:
            在""中,可以填充一个以","分隔的路径列表,bash会将其展开为多个独立的路径;
            示例:
                ~]# mkdir -pv /china/hb,hn,jl,hlj,ln/link,linka,linkb/class18

                ~]# cp 1.txt,.bak
                    1.txt,.bak == 1.txt 1.txt.bak

    五、命令的执行结果
        在bash中,命令的执行结果有两种:
            1.执行命令的输出结果:
                根据用户的需求获取到的命令执行的正常输出结果;
            2.执行命令的状态返回值:
                此前的一个命令是否成功执行相关的返回内容;
                bash使用一个特殊的内置变量来保存其内容:$?
                    $?实际上保存的是一个数值,其取值范围:0-255
                    其中:
                        0:表示命令执行成功;
                        1-255:表示命令执行失败;
                            1,2,127:bash中内置的命令执行失败的状态返回值;
                                1:表示小问题;
                                2:表示严重问题;
                                127:表示命令本身出现问题;
                                其余数字(3-126,128-255):用户可以自定义的失败状态返回值;

    六、引用功能:
        '':强引用
            凡是被单引号引用的内容,bash在处理时,一律视其为普通字符,即使其本身是bash定义的具有特殊功能和作用字符亦是如此,但单引号本身除外;

        "":弱引用
            被双引号引用的内容中,有些特殊字符仍然会保留其特殊含义,如: $, \, "";
        eg:[[email protected] ~]# echo  '$(date)'
            $(date)
            [[email protected] ~]# echo "$(date)"
            2018年 04月 03日 星期二 15:41:53 CST

    七、转义功能:
        \:bash定义的转义字符;大多数的情况下,"\"只能将其后面一个字符转义;

        \COMMAND:取消定义过的命令别名,而使用命令本身的功能;

    八、Globbing——文件名通配符,简称为glob;
        *:匹配任意长度的任意字符或字符串;(某些特殊位置的"."字符不能匹配;)
        ?:匹配任意单个字符;(某些特殊位置的"."字符不能匹配;)
        []:匹配指定范围内的任意单个字符,必须匹配且只能匹配一个字符;
            指定范围的方法:
                1.枚举法:列出所有有效字符;
                2.范围指定:
                    [0-9]:表示所有单个的十进制数字;
                    [a-z]:所有小写字母
                    [A-Z]:所有大写字母
                3.bash内建字符集:
                    [:lower:]:所有的小写字母
                    [:upper:]:所有的大写字母
                    [:alpha:]:所有字母,包括大小写;
                    [:digit:]:所有单个的十进制数字;
                    [:alnum:]:所有的字母和十进制数字;
                    [:punct:]:所有的符号;
                    [:space:]:表示空白字符,包括空格和制表符;
                4.反向匹配:
                    [^]
                    示例:
                        #ls a[^[:digit:]]??  //表示文件名的第二个字符不能是十进制数字;

                    注意:当中括号中有"^"表示字符集反向匹配时,注意"*"的使用;因为"*"通配范围可能会导致反向匹配失败;此类失败是因为bash的globbing是在贪婪模式下匹配的;

    九、管道
        |
        管道通常是用来连接多个命令的;将管道符号前面的命令的执行的输出结果通过管道传递给管道符号后面的命令,让后面的命令将前面命令的输出结果当成参数使用;
        注意:
            1.一般来讲,凡是被管道连接的命令,都应该能够在执行成功之后完成命令结果的输出,否则管道无意义;
            2.管道不是万能的,有些场合没办法使用管道的;

    十、命令引用或命令替换:

            ``  相当于    $(),用于引用命令的结果
            ``:反向单引号,反引号;(与"~"同一个键)
            示例:
                创建一个文件,文件名为test-系统时间;
                ~]# touch test-`date +%F-%H-%M-%S`

    十一、输入输出重定向

        可以用于输入的设备:文件
            键盘设备、文件系统中的常规文件、网卡设备、声卡设备、磁盘设备等;

        可以用于输出的设备:文件
            显示器、文件系统中的常规文件、网卡设备、声卡设备、磁盘设备等;

        在内存中使用文件的方式是定义文件描述符,一个文件描述符对应一个文件;
            0:表示标准输入,stdin,从键盘实现的输入数据流;
            1:表示标准输出,stdout,到显示器的输出数据流;
            2:表示标准错误,stderr,到显示器的错误数据流;

        输入输出重定向(IO重定向)
            采用非标准设备文件实现的IO操作;
            输入重定向:
                <

            输出重定向:
                >:覆盖输出重定向;
                    ~]# set -C  //开启防止意外覆盖源文件开关,可以使用">|"符号完成覆盖重定向输出的操作,而无需关心是否开启此开关;
                    ~]# set +C  //关闭防止意外覆盖源文件开关
                >>:追加输出重定向;

            错误重定向:
                2>:覆盖错误重定向;
                2>>:追加错误重定向;可用于收集程序执行返回的错误信息;执行正确则不追加任何信息;

            合并标准输出和标准错误的重定向:
                1.COMMAND >|>> /PATH/TO/SOMEFILE 2>&1
                2.&>, &>>  不管命令执行结果是否正确,都会将标准输出重定向到指定文件;

            特殊的设备文件:
                /dev/null:BlackHole,BitBucket(位桶)  
                /dev/zero:泡泡机,吐零机;

            bash中的其他特殊符号:
                < :输入重定向
                    eg:[[email protected] ~]# cat   <  /etc/fstab
                        #
                        # /etc/fstab
                        .......................
                    用处很少,因为在命令行中参数与命令之间默认存在此字符;
                        
                <<:here document,此处文档,结束标记;
                    示例:
                        [[email protected] ~]# cat << boom
                        > i love  you
                        > boom
                        i love  you
                    以输入的字符串(boom)为开始,以他(boom)结束之间的所有数据当作参数传给前面的命令;

                <<<:here string,此处字符串,结束标记;
                    示例:
                        [[email protected] ~]# bc <<< 20/5
                        4

十二、bash变量
    变量:一段有名称的连续的内存空间;这段内存空间的名称,称为变量名;在这段内存空间中存储的数据,则称为变量值;

    向变量(内存空间)中存储数据的过程,称为赋值操作;赋值符号通常为"=";

    变量的类型:
        123 -- 整型:01111011
            -- 字符型:ASCII:3字节
            -- 字符型:UTF-8:9字节

    变量分为:
        强变量:使用之前必须事先予以声明;必须声明变量类型;(C语言中的变量)
        弱变量:在使用之前无需声明,无需指明变量类型;(bash变量)

    变量的赋值方法:
        VARNAME=VALUE
        其含义:将某数值(VALUE)通过赋值操作(=)存储于特定的内存空间中(VARNAME);

        bash中变量名称的命名规范:
            1.变量名只能以"_"或"字母"为起始字符,后面的其他字符可以是任意字母,数字或下划线;
            2.变量名中的字母是大小写敏感的;
            3.命名的书写格式:
                全大写:HISTSIZE
                全小写:myvar
                驼峰式:MyNewVariable
                连接式:My_New_Var
            4.变量名要能做到见名知意;
            5.变量名不能与已知变量或bash的内置变量重复;

    bash中的变量的分类:
        根据变量的作用范围来划分:
            全局变量(环境变量):作用范围为整个shell进程,包括其子shell;
            本地变量:作用范围为当前登录时打开的shell进程,不包括其子shell;
            局部变量:作用范围仅仅只是当前程序段,一般用于函数;

        根据变量的声明方式来划分:
            bash内置变量:
                普通的内置变量:HISTSIZE,...
                位置参数变量:$0, $1, $2, ...
                特殊变量:$?, $#, $*, [email protected], $$, ...
                    $?:展开为最近一次执行的命令的状态返回值(退出状态码);用以表示最近一次执行的命令是否成功执行;
                    $#:不包括$0在内的其余的位置参数的个数,以十进制数字表示;
                    $*:从$1开始展开为位置参数。当使用双引号引用展开的结果时,它展开为特殊变量IFS的第一个字符分隔的值;
                    [email protected]:从$1开始展开为位置参数。当使用双引号引用展开的结果时,它展开为一个单独的字符串;
                    $$:展开为当前shell的进程标识符;
            自定义变量:

        变量的使用:
            1.变量的声明和赋值:
                1) 声明全局变量(环境变量):
                    export VARNAME
                    export VARNAME=VALUE

                    declare命令:
                        declare - Set variable values and attributes - 设置变量值和属性
                        格式:declare [-aAfFgilrtux] [-p] [name[=value] ...]
                            常用的选项:
                                -a:声明索引数组(如果支持)
                                -A:声明关联数组(如果支持)
                                -i:声明整型变量
                                -l:声明变量并将变量值中的字母转换为小写字母;
                                -u:声明变量并将变量值中的字母转换为大写字母;
                                -r:声明只读变量;该变量仅能进行一次赋值操作;
                                -x:声明变量并将其导出为全局变量;

                    declare -x VARNAME[=VALUE]

                2) 声明本地变量:
                    VARNAME=VALUE

                3) 声明局部变量:
                    local VARNAME[=VALUE]
                local命令  - 定义本地变量
                本地变量只能在函数内部被使用,它们只能在定义它们的函数内部以及子函数中可见。

            2.查看环境变量:
                set命令:
                    显示当前shell的变量,包括当前用户的变量
                export命令:
                    查看变量名称,也可以为变量赋值;
                env命令:
                    显示当前用户的变量
            3.查看变量的值:
                echo $VARNAME

            4.撤销变量的赋值及变量声明
                unset VARNAME

    有关于保存变量的shell配置文件:
        通用配置文件:
            /etc/bashrc
            /etc/profile
            /etc/profile.d/*
        私人配置文件:
            ~/.bashrc
            ~/.bash_profile
    注意:
        1.一般情况下,变量都是随用随声明,除非有必要,否则不建议修改配置文件的内容;
        2.声明的变量在使用完以后,最好使用unset命令予以撤销;避免影响计算机性能;

bashshell相关特性(代码片段)

bash基础特性之:命令历史命令历史:shell进程会在会话中保存此前用户提交执行过的命令;查看历史命令:~]#history定制history的功能,可通过环境变量来实现;HISISIZE:shell进程可保留的命令历史条数;HISIFILE:持久保存命令历史... 查看详情

bash基本特性

bash基本特性bash是Linux中最常使用到的shell,它给用户提供了许多便利的功能和特性,下面就介绍一些bash的基本特性。 1、命令历史historybash能为我们提供命令的存储功能,我们也可以借由history命令来查看我们以往输入过的命... 查看详情

bash基础特性

bash特性及bash脚本编程初步终端,附着在终端的接口程序:    GUI:KDE,GNome,xfce    CLI:/etc/shellsbash的特性:    命令行展开:~,{}    命令别名:alias,unalias&nbs 查看详情

bash特性小结&bash变量

时间就是金钱效率就是生命一、bash编程 |---------------||应用           ||-----------|   ||壳|库函数 |    | //可以直接针对系统调 查看详情

bash特性

bash的基础特性(1): (1)命令历史history系统中history环境变量:HISTSIZE:命令历史记录的条数;HISTFILE:~/.bash_history;HISTFILESIZE:命令历史文件记录历史的条数; history-dOFFSET(具体删除第几条历史记录)history-c 清空所有... 查看详情

bash基础特性

...的环境变量可以通过ehco$#查看#为环境变量 bash的基础特性:(1)命令历史 history 环境变量: HISTSIZE:命令历史记录的条数 HISTFILE;~/.bash_history HISTFILESIZE:命令历史文件记录历史的条数 history-doffset删除某条历史命令 his... 查看详情

bash的特性

bash的特性Bash(GNUBourne-AgainShell)是许多Linux发行版的默认Shell。事实上,还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,ShellScript大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shel... 查看详情

bash基础特性命令引用

...D` 这是反引号:就是ESC键下面的那个反引号bash的引用特性: 引用 强引用:‘‘单引号弱引用:""双引号命令引用:$(COMMADN) bash特性:快捷键 ctrl+a:跳转至命令行首ctrl+e:跳转至命令行行尾ctrl+u:删除行首至光标... 查看详情

bash特性

bash特性一、命令别名:(自定义命令) 用alias命令查看 alias命令可以用来定义和现实命令的别名 但是使用alias命令定义的别名,其生命仅为当前shell的生命期 对于每个用户来说,都有一个私有的bash文件,用于保... 查看详情

bash特性之五

一、bash特性之四,命令别名alias,shell的内建命令,显示当前系统所有的命令别名alias别名="原始命令"ualias别名撤销已经定义的别名。命令使用命令本身,而非命令别名。二、bash特性之五,globbing,统配符 *:匹配任意长度的... 查看详情

bash及其特性

...:Gnome,KDE,XfaceCLI:sh,csh,ksh,bash(兼具sh、csh等各种特性,功能更强大,且遵循开源协议),tcsh,zsh进程:在每个进程看来,当前主机上只存在内核和当前进程进程是程序的副本,进程是程序的执行过程用户工作环境:窗... 查看详情

bash及其特性

bash及其特性:        1.程序只有一个,但可以有多个进程,在每个进程来看,当前主机上只存在内核与当前进程          2.进程是程序的副本,进程是程序的执行实例 ... 查看详情

bash特性及用户和组管理

bash特性及用户和组管理 上篇博文中总结了bash的一些特性,这次做补充: bash变量 变量:一段由名称的连续的内存空间;这段内存空间的名称,就是变量名,在这   段内存空间存储数据 就是变量值;&nb... 查看详情

bash特性

BashLinux系统终端概述图形化    服务器终端切换:Ctrl+Alt+F1_F6    虚拟机终端切换:Ctrl+Shift+Alt+F1_F6 字符终端    服务器终端切换:Alt+F1_F6    pkill-9-ttty2& 查看详情

bash基础特性

对BASH做一下总结一、命令历史特性: historyshell进程会其会话中保存此前用户提交执行过的命令history是shell的内置命令650)this.width=650;"src="http://s5.51cto.com/wyfs02/M00/78/1F/wKiom1Z2ZjWSJrjdAAA9gP4LoMo818.jpg"title="未命名图片.jpg"width="400 查看详情

08-bash基础特性及基础命令

bash的基础特性  (1)命令历史 history HISTSIZE:命令历史记录的条数: HISTSIZE:~/.bash_history HISTFILESIZE:命令历史文件记录的条数: history-dOFFSET   -c history#:显示历史最近的#条命令: -a:手动追加当前会话... 查看详情

bash的特性之多命令执行

bash的特性之多命令执行  一上午的时间学习了bash的特性之多命令执行,和对shell脚本编程的初步学习。bash的特性的多命令执行的顺序执行结构就是把几个命令用分号隔开。而选择执行结构有与、或、非三种运算法则。shel... 查看详情

bash的基本特性

Bash基本特性: 首先得从逻辑运算来说起: 与运算 && 两个判断条件都必须为真时,状态才为真,否则都为假,在此1是真,0是假 1&&1=1 1&&0=0 0&&1=0 0&&0=0 或运算|| 两个判断条件中都必须... 查看详情