Linux中bash中的幾種基礎特性彙總!

    首先需要知道什麼是shell?如果將Linux內核當作一個地球的核心,那麼shell就是地殼。shell本身也是一個應用程序,爲我們提供了使用系統的接口。shell程序有很多種,目前主流發行版大多數默認使用bash,其次還有sh,tcsh,csh,fish等,其程序存儲在/etc/shells目錄下。

    由於目前最常用的bash,所以就以bash爲例來說一說bash的基礎特性,偷偷說一句,其實我也是個新手,其他的shell並未接觸,不敢輕易去說,當然本文中難免有錯誤,還請各位不吝賜教,讓大家共同進步。

 bash的基礎特性之:命令歷史

        history命令:記錄當前用戶的使用過的命令的歷史記錄。可通過手動設置環境變量來定製        history的功能;

        HISTSIZE:shell進程可保留的命令歷史的條數,默認是1000條。

        HISTFILE:持久保存命令歷史的文件,其路徑在每個用戶的家目錄下面的.bash_history裏面。

        HISTFILESIZE:設置~ USERNAME/.bash_history保存的命令的條數,默認是1000條。

        HISTCONTROL:控制命令歷史記錄的方式,有三種方式:    

            1.ignordeups:忽略重複的命令

            2.ignorespace:忽略以空白字符開頭的命令

            3.ifnoreboth:以上兩者同時生效

    其命令的用法爲:

~]# history [option]
    history -anrw [FILENAME]
    history -ps [參數][參數...]

    其option主要有以下幾種:

        -c 清空命令歷史記錄

        -d offset(偏移量) 刪除指定命令歷史記錄

        -r 從文件讀取命令歷史記錄到歷史列表中

        -w 把歷史列表中的命令追加到歷史文件中

        history # 查看指定的第#條歷史命令 

     調用命令歷史列表中的命令:

        !# 再次執行第#條命令

        !! 再次執行上一條命令

        !STRING 再次執行最近一個以STRING開頭的命令

      調用上一條命令的最後一個參數:

          快捷鍵:先按ESC鍵後,在按.鍵

          也可以直接輸入:!$調用上一條命令的參數


  bash的基礎特性之:

        命令補全:shell程序在接收到用戶執行命令的請求,分析完成之後,最左側的字符串會被當作      命令處理機制:先查找shell內嵌命令,如果沒有則根據PATH環境變量中設定的目錄,從左到右逐      個搜索目錄下的文件名,直到給定的打頭字符串能夠唯一標識某命令程序文件,則按一次tab鍵補      全;若僅不能唯一標識,則按兩次tab鍵列出命令列表;否則無反應。

         路徑補全:根據給定的起始路徑,以對應的路徑下的打頭字符串來逐一匹配起始路徑下的每個      個文件,該打頭字符串能夠唯一標識,則按一次tab鍵直接補全,如果僅不能唯一標識,則給出所      有符合條件的命令列表,否則無反應。

         這裏介紹兩個目錄管理類的命令:mkdir和rmdir

            mkdir:創建目錄,其格式爲:

                mkdir [OPTIONS] ... DIRECTORY

                OPTINOS主要有以下幾種:

                    -p 自動按需創建目錄,如果上級目錄不存在會自動創建。

                    -v verbose,顯示創建的詳細過程。

                    -m MODE 創建目錄時直接給定權限,否則默認權限。

            rmdir:刪除目錄,其格式爲:

                rmdir [OPTIONS] ...DIRECTORY...

                    -p 刪除目錄後,如果目錄爲空,則一般刪除,直到父目錄不爲空爲止,危險慎                          用。

                    -v verbose,顯示刪除的詳細過程。


  bash基礎特性之:命令hash

        前面說到命令補全機制,Linux在每次搜索命令都是需要消耗一定的時間的,雖然每次進行的時

     間很短,但是積少成多,因此就有了hash表,來緩存此前 使用過的命令。

        hash主要命令:

            hash ;列出

            hash -d COMMAND 刪除

            hash -r 清空


 bash基礎特性之:命令行展開    

            ~ USERNAME:自動展開用戶家目錄,或指定的用戶的家目錄.

            {}:可承載一個以逗號分隔符的路徑列表,並能夠將其展開爲多個路徑,例如/tmp/{a,b}相                當於/tmp/a /tmp/b。

        這裏介紹一個查看目錄結構的命令:tree命令

             tree [OPTIONS] [DIRECTORY]

                    -L level指要顯示的目錄的層級


  bash的基礎特性之:命令的執行狀態結果

        bash通過狀態返回值來輸出此結果,成功爲0,失敗爲1-255,可以通過$?命令來查看上一命令      的狀態返回值,進而確定命令的執行狀態結果。

        引用命令的執行結構有兩種方式:$(COMMAND)或者`COMMAND`. 

  

  bash的基礎特性之:引用

        強引用:''變量引用不能被替換

        若引用:""變量引用可以被替換

        命令引用:``


  bash的基礎特性之:快捷鍵

        Ctrl+a:跳轉至命令行的行首

        Ctrl+e:跳轉至命令行的行尾

        Ctrl+u:刪除行首至光標所在處之間的字符

        Ctrl+k:刪除光標所在處到行尾之間的字符

        Ctrl+l:清屏


  bash的基礎特性之:文件名通配globbing

        *:表示匹配任意長度的任意字符的,例如p*表示所有p開頭的字符

        ?:表示匹配單個任意字符,例如p?表示p開頭的所有兩個字符

        []:匹配指定範圍內的任意單個字符,有幾種特殊格式:

            [a-z]、[A-Z]、[a-z0-9]不區分大小寫

            [[:upper:]]表示所有的大寫字母

            [[:lower:]]表示所有的小寫字母

            [[:alpha:]]表示所有的字母

            [[:digit:]]表示所有的數字

            [[:almun:]]表示所有的字母和數字

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

            [[:punct:]]表示所有的標點符號

        [^]表示匹配指定範圍外的任意字符

            例如[^0-9]表示除0-9以外的任意字符


  bash的基礎特性之:IO重定向及管道

            可用的輸入的設備:文件(對Linux而言,一切皆文件)包括鍵盤設備,文件系統上的

        常規文件,網卡等。

            可用的輸出的設備:文件,包括顯示器,文件系統上的常規文件,網卡等。

        程序的數據流有三種:

            輸入的數據流:標準輸入(stdin),標準設備是鍵盤

            輸出的數據流:標準輸出(stdout),標準設備是顯示器

            錯誤輸出流:錯誤輸出(stderr),標準設備是顯示器

        fd:file derscriptor,文件描述符:

            標準輸入:0

            標準輸出:1

            錯誤輸出:2

        IO重定向:

            輸出重定向:>,覆蓋輸出,直接覆蓋原文件,例:cat /etc/issue > /dev/sda 此命令非         常危險,可能會幹掉硬盤,在dev設備文件下進行操作時一定要注意。

            輸出重定向:>>,追加輸出,在文件的尾部新增。

            這裏可以使用set命令來設置或撤銷選項的值或位置參數,set -C:禁止覆蓋輸出至已存在

         的文件,此時可以使用>|強制覆蓋輸出。set +C:關閉上述特性。

            錯誤輸出流重定向:2>,2>>

            合併正常輸出流和錯誤輸出流有兩種方式:1、&>,&>>,2、COMMAND > /PATH/TO/SOMEFILE         2&>1或者COMMAND >> /PATH/TO/SOMEFILE 2&>1。

            tr命令:

                tr [options]...SET1 [SET2]

                    說明:把輸入的數據當中的字符,範式在SET1定義範圍類出現的,通通對位轉換

                爲SET2出現的字符。

                    用法一:tr SET1 SET2 </PATH/FROM/COMEFILE

                            tr [a-z] [A-Z] < /etc/issue

                    用法二:tr -d < /PATH/PROM/SOMEFILE

                <<:here document此處創建文檔

                    cat << EOF 內容 EOF

                    cat > /PATH/TO/SOMEFILE <<EOF 內容 EOF

               管道:連接程序,實現將前一個命令的輸出直接定向後一個程序當作輸入數據流

                COMMAND1 | COMMAND2 |COMMAND3

                    這裏有一個不得不說的命令:tee

                        COMMAND1 | tee /PATH/TO/SOMEFILE | COMMAND2

                    Linux的重要哲學思想之一:組合小程序,完成複雜的任務。   

 

  bash基礎特性之:變量

        我們說程序是由指令+數據組成,這裏的指令是由程序文件提供,數據由IO設備、文件、管道、     變量等提供,我們也說程序是由算法及其算法所決定的數據結構組成。不管哪種方式,都離不開

     數據,但是在程序中,數據是不可能一成不變的,這就有了變量。什麼是變量名呢?變量名就是

     指向內存空間的某段起始位置。

            變量賦值:name=value

            變量類型:存儲格式、表示數據範圍以及能夠參與的運算

                編程語言:

                    強類型編程:嚴格定義了數據的類型,並且要事先聲明,有的編程語言還要事先

                         賦值。如C,JAVA

                    弱類型編程:不用嚴格區分數據類型,bash

                        bash把所有的字符串統統視爲字符型,在進行運算時自動轉換成數值型,不

                    支持浮點數,除非進行外在工具。

                        bash中的變量無需事先聲明,相當於把聲明和賦值過程同時實現。

             變量替換:把變量名出現的位置替換爲其所指向的內存空間的數據。

             變量引用:${var_name} ,$var_name

             變量名:只能包含數字,字母和下劃線且不能以數字開頭,變量名的命名法則:見名知意

                    命名機制遵循某種法則,不能使用程序的保留字符spacer.gifif,while,else...

             bash的變量類型:

                    本地變量:作用域爲當前shell;

                        變量賦值:name=value

                        變量的引用:${name},$name

                         查看變量:set命令

                        撤銷變量:unset name;此處非變量引用,不用加$

                    環境變量:作用域爲當前shell及其子shell進程;

                        變量賦值:export name=value

                               或 declare -x name=value

                         變量引用:${name},$name

                        bash內嵌了許多環境變量,通常爲大寫字符,用於定義bash的工作環境,如

                        PAHT,HISTSIZE,HISTFILESIZE,HISTFILE,HISTCONTROL,SHELL,HOME,UID,PWD,

                        OLDPWD...

                        查看環境變量:export或declare -x或printenv或env

                        撤銷環境變量:unset name

                     局部變量:作用域僅爲某代碼片段(函數上下文)

                     特殊變量:shell內置的有特殊功用的變量。

                      只讀變量:1、declare -r name 或readonly name只讀變量無法重新賦值,並且

                                不能撤銷,存活時間爲當前shell進程生命週期,shell進程的終止

                                而終止。

         

  bash特性之多命令執行:

            ~]# COMMAND1;COMMAND2;COMMAND3;...

邏輯運算:

運算數:真(true,yes,on,1)

假(false,no,off,0)

與:

1&&1=1 

1&&0=0 

0&&1=0 

0&&0=0 

1||1=1 

1||0=1 

0||1=1 

0||0=0 

!0=1 

!1=0

短路法則:

~]# COMMAND1 && COMMAND2 

COMMAND1爲"假",則COMMAND2不會執行

否則,COMMAND1爲“真”,則COMMAND2必須執行

~]# COMMAND1 || COMMAND2

COMMAND1爲“真”,則COMMAND2不執行,否則

COMMAND1爲“假”,則COMMAND2必須執行

示例:id $username || useradd $username


                       



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章