Bash的特性

1、命令的別名——(自定義命令)
alias
alias - 定義或顯示別名。
格式:alias [-p] [名稱[=值] ... ]
注意:若是alias命令不帶任何選項和參數,則表示顯示全部已經定義並生效的別名設置;linux

unalias
        unalias - 從別名定義列表中刪除每個"名字"。
        格式:unalias [-a] 名稱 [名稱 ...]

    注意:
        不管使用alias命令仍是使用unalias命令,其功能都會當即生效;此二命令的生命期僅爲當前shell的生命期;一旦註銷登陸,至關於關閉了bash,則使用alias命令定義的別名或使用unalias命令刪除的別名操做,會當即失效;

    對於每一個用戶來講,都有一個私有的bash的配置文件,就在用戶的家目錄中的一個隱藏文件,文件名爲".bashrc",其主要功能就是用來保存命令的別名的定義;

        注意:
            在對於此文件中的命令別名進行編輯並保存以後,在當前已經運行的bash中並不會當即生效,須要從新加載此文件才能使配置生效,如下兩種操做皆可實現:
                1.重啓bash:註銷以後再次登陸便可;
                2.執行文件中定義的命令:使用source命令,或者.命令;

                source/.
                source - 在當前 shell 中執行一個文件中的命令。
                . - 在當前 shell 中執行一個文件中的命令。

                格式:source/. 文件名 [參數]

2、bash的快捷鍵:
    C:Ctrl鍵
    M:Alt鍵
    E:ESC鍵
    DEL:Backspace鍵

    C-l:清屏,至關於clear命令;
    C-a:將光標跳轉至命令行編輯模式的行首;
    C-e:將光標跳轉至命令行編輯模式的行尾;
    C-k:刪除命令行編輯模式的光標所在位置至行尾的內容;
    C-u:刪除命令行編輯模式的光標所在位置至行首的內容;
    C-c:結束前臺進程;
    M-.:引用上一個命令中的最後一個參數;(在Xshell中不能用)
    E,.:功能同M-.

3、命令歷史:
    Bash進程會保存其會話中的用戶曾經執行過的命令,以方便用戶重複執行某個命令操做;
        命令歷史包括兩個方面:
            1.用戶曾經執行過的命令;
            2.用戶曾經執行過的命令的路徑;

        在Bash中有一個內置的變量——PATH,PATH變量的值爲當前系統中全部的命令的文件所在的路徑的集合;

    命令如何被shell執行的?
        bash會將命令行的內容按照空白字符進行切片,分析第一個切片內容:
            1.判斷第一個切片的內容是內部命令仍是外部命令;
                若是是內部命令,直接運行;
                若是是外部命令,先找hash表中的路徑緩存,若是有,則直接執行;不然經過查找PATH變量中包含路徑中,是否有對應名稱的文件;

                使用hash命令查看被記住的命令文件的路徑;
                    -r:清空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:上述兩種狀況都不會被記錄到歷史緩衝區;

4、命令補全——(TAB鍵的使用)
    包括兩個方面的內容:
        1.構成命令字符串的補全;
            參考PATH變量中的路徑,對命令進行補全:
                若是,給出的字符串在PATH變量對應的路徑中是惟一的,則直接補全命令;
                若是,給出的字符串在PATH變量對應的路徑中不惟一,則bash給出提示;

        2.命令中參數所對應的字符串補全;
            根據給出的路徑進行補全:
                若是,給出的字符串在給出的路徑中是惟一的,則直接補全參數;
                若是,給出的字符串在給出的路徑中不惟一,則bash給出提示;

5、命令行展開
    (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

6、命令的執行結果
    在bash中,命令的執行結果有兩種:
        1.執行命令的輸出結果:
            根據用戶的需求獲取到的命令執行的正常輸出結果;
            命令引用或命令替換:

            ``  至關於 $()
            ``:反向單引號,反引號;

            示例:
                建立一個文件,文件名爲test-系統時間;
                ~]# touch test-`date +%F-%H-%M-%S`

        2.執行命令的狀態返回值:
            與此前的一個命令是否成功執行相關的返回內容;
            bash使用一個特殊的內置變量來保存其內容:$?
                $?實際上保存的是一個數值,其取值範圍:0-255

                其中:
                    0:表示命令執行成功;
                    1-255:表示命令執行失敗;
                        1,2,127:bash中內置的命令執行失敗的狀態返回值;
                            1:表示小問題;
                            2:表示嚴重問題;
                            127:表示命令自己出現問題;

                            其他數字(3-126,128-255):用戶能夠自定義的失敗狀態返回值;

7、引用功能:
    '':強引用
        凡是被單引號引用的內容,bash在處理時,一概視其爲普通字符,即便其自己是bash定義的具備特殊功能和做用字符亦是如此,但單引號自己除外;

    "":弱引用
        被雙引號引用的內容中,有些特殊字符仍然會保留其特殊含義,如: $, \, "";

8、轉義功能:
    \:bash定義的轉義字符;大多數的狀況下,"\"只能將其後面一個字符轉義;

    \COMMAND:取消定義過的命令別名,而使用命令自己的功能;

9、Globbing——文件名通配符,簡稱爲glob;
    *:匹配任意長度的任意字符或字符串;(某些特殊位置的"."字符不能匹配;)
    ?:匹配任意單個字符;(某些特殊位置的"."字符不能匹配;)
    []:匹配指定範圍內的任意單個字符,必須匹配且只能匹配一個字符;
        指定範圍的方法:
            1.枚舉法:列出全部有效字符;
            2.範圍指定:
                [0-9]:表示全部單個的十進制數字;
                [a-z]:a,A,b,B,c,C,...,x,X,y,Y,z
                [A-Z]:A,b,B,c,C,...,x,X,y,Y,z,Z
            3.bash內建字符集:
                [:lower:]:全部的小寫字母
                [:upper:]:全部的大寫字母
                [:alpha:]:全部字母,包括大小寫;
                [:digit:]:全部單個的十進制數字;
                [:alnum:]:全部的字母和十進制數字;
                [:punct:]:全部的符號;
                [:space:]:表示空白字符,包括空格和製表符;
            4.反向匹配:
                ^
                示例:
                    #ls a[^[:digit:]]??  //表示文件名的第二個字符不能是十進制數字;

                注意:當中括號中有"^"表示字符集反向匹配時,注意"*"的使用;由於"*"通配範圍可能會致使反向匹配失敗;此類失敗是由於bash的globbing是在貪婪模式下匹配的;

10、管道
    |
    管道一般是用來鏈接多個命令的;將管道符號前面的命令的執行的輸出結果經過管道傳遞給管道符號後面的命令,讓後面的命令將前面命令的輸出結果當成參數使用;

    wc:
        wc - print newline, word, and byte counts for each file
        格式:wc [OPTION]... [FILE]...
            經常使用選項:
                -c, --bytes:僅顯示文件中的字節數;
                -m, --chars:僅顯示文件中的有效字符的數量;
                -l, --lines:僅顯示文件的行數;
                -w, --words:僅顯示文件中字的數量;

    注意:
        1.通常來說,凡是被管道鏈接的命令,都應該可以在執行成功以後完成命令結果的輸出,不然管道無心義;
        2.管道不是萬能的,有些場合沒辦法使用管道的;

11、輸入輸出重定向
    在使用計算機的時候,實現某個功能的主體是程序!

    程序=指令 + 數據

    數據相當重要!

    文件,IO——Input/Output

    在linux系統中,可以完成輸入和輸出功能的實體:文件;

    能夠用於輸入的設備:文件
        鍵盤設備、文件系統中的常規文件、網卡設備、聲卡設備、磁盤設備等;

    能夠用於輸出的設備:文件
        顯示器、文件系統中的常規文件、網卡設備、聲卡設備、磁盤設備等;

    在內存中使用文件的方式是定義文件描述符,一個文件描述符對應一個文件;
        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中的其餘特殊符號:
            <<:here document,此處文檔,結束標記;

12、bash變量
變量:一段有名稱的連續的內存空間;這段內存空間的名稱,稱爲變量名;在這段內存空間中存儲的數據,則稱爲變量值;

程序 = 指令 + 數據

數據:文件,存在值;

向內存空間(變量)中存儲數據的過程,稱爲賦值操做;賦值符號一般爲"=";

變量的類型:
    123 -- 整型:01111011
            -- 字符型:ASCII:3字節
            -- 字符型:UTF-8:9字節

變量:
    強變量:使用以前必須事先予以聲明;必須聲明變量類型;
    弱變量:在使用以前無需聲明,無需指明變量類型;(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, ...
            特殊變量:$?, $#, $*, $@, $$, ...
                $?:展開爲最近一次執行的命令的狀態返回值(退出狀態碼);用以表示最近一次執行的命令是否成功執行;
                $#:不包括$0在內的其他的位置參數的個數,以十進制數字表示;
                $*:從$1開始展開爲位置參數。當使用雙引號引用展開的結果時,它展開爲特殊變量IFS的第一個字符分隔的值;
                $@:從$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]
        2.查看環境變量:
            set命令:
                查看和改變shell屬性的值及查看shell變量的變量名和變量值;
    export命令:
                查看變量名稱,也能夠爲變量賦值;
            env命令:
        3.查看變量的值:
            echo ${VARNAME}
        4.撤銷變量的賦值及變量聲明
            unset VARNAME
相關文章
相關標籤/搜索