Bash 詳解

一、Bash是什麼?

    bash 是一個爲GNU計劃編寫的Unix shell。它的名字是一系列縮寫:Bourne-Again SHell — 這是關於Bourne shell(sh)的一個雙關語(Bourne again / born again)。Bourne shell是一個早期的重要shell,由史蒂夫·伯恩在1978年前後編寫,並同Version 7 Unix一起發佈。bash則在1987年由布萊恩·福克斯創造。

        Bash(GNU Bourne-Again Shell)是許多Linux平臺的內定Shell,事實上,還有許多傳統UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等,Shell Script大致都類同,當您學會一種Shell以後,其它的Shell會很快就上手,大多數的時候,一個Shell Script通常可以在很多種Shell上使用。

        bash是大多數Linux系統以及Mac OS X v10.4默認的shell,它能運行於大多數Unix風格的操作系統之上,甚至被移植到了Microsoft Windows上的Cygwin系統中,以實現windows的POSIX虛擬接口。此外,它也被DJGPP項目移植到了MS-DOS上。

        bash的命令語法是Bourne shell命令語法的超集。數量龐大的Bourne shell腳本大多不經修改即可以在bash中執行,只用了Bourne特殊變量或使用了Bourne的內置命令的腳本才需要修改。 bash的命令語法很多來自Korn shell (ksh) 和 C shell (csh), 例如命令行編輯,命令歷史,目錄棧,$RANDOM 和 $PPID 變量,以及POSIX的命令置換語法: $(...)。作爲一個交互式的shell,按下TAB鍵即可自動補全已部分輸入的程序名,文件名,變量名等等。

二、Bash特性介紹。

    1、命令歷史。

        1)環境變量:$HISTSIZE,設置命令的歷史保存最大條數

                     $HISTFILE,用戶退出時的持久保存位置,通常爲用戶家目錄下的.bash_history

                     $HISTFILESIZE,命令保存文件中可保存的命令最大條數

                     $HISTCONTROL,命令歷史保存規則:    ignoredups,忽略重複的命令,連續相同的命令才能匹配

                                                     ignorespace,忽略以空白字符打頭的命令

                                                     ignoreboth,以上二者同時生效

        2)命令用法。

            history N:顯示最近的N條,包括當前命令本身

            history -c:清空命令歷史

            history -d offset:刪除指定的偏移處的命令條目

            history -a [/path/to/file]:將當前會話的命令歷史寫入指定文件

        3)調用命令歷史。

            !#:執行命令歷史的第#條命令

            !!:執行上一條歷史命令

            !string:執行命令歷史由最後一次以string開頭的命令

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

            "ESC",".":先按ESC再按"." 功能同上

    2、命令補全,

       路徑補全:每個絕對路徑都可以切割爲兩部分,basename(基名)、dirname(目錄名)

    3、狀態返回值:每個命令執行結束後,會有一個執行狀態返回值,有效範圍0-255,0表示執行成功,1-255表示執行失敗,使用特殊變量"$?"可獲取最近一條命令的狀態返回值, #echo $?

    4、命令行展開:~表示用戶家目錄,~USERNAME指定用戶的家目錄

                   {}:/tmp/{x,y}展開爲  /tmp/x,/tmp/y

    5、命令別名和命令引用:通過命令alias定義命令別名

                           定義命令別名:alias grep="grep --color"

                           撤銷別名:unalias grep,unalias -a撤銷所有別名

    6、bash支持的引用:

                    ''

                    ""

                    ``:引用一個命令的執行結果,$()也是一樣

    7、文件名通配:

                  *:任意長度的任意字符
                  ?:匹配任意單字符
                  []:匹配指定範圍內的任意單字符
                          [abc],[a-z],[0-9],[0-9a-z]
                  [^]:匹配指定範圍以外的任意單字符
                            [^0-9a-z]
                   [:space:]  所有空白字符
                   [:punct:]  所有標點符號
                   [:lower:]  所有小寫字母
                   [:upper:]  所有大寫字母
                   [:digit:]  所有數字
                   [:alnum:]  所有字符集合
                   [:alpha:]  所有字母集合

    8、輸入、輸出重定向和管道

        標準輸入:0    
        標準輸出:1
        錯誤輸出:2
   重定向:改變其標準位置
   輸出重定向:COMMAND > POSITION  
   錯誤重定向:COMMAND 2> POSITION 
   合併重定向:COMMAND > POSITION 2>&1
   分別重定向:COMMAND > POSITION 2> POSITION2
   輸入重定向:COMMAND < POSITION

        

    9、快捷鍵

        Ctrl+a:跳轉至命令行首

        Ctrl+e:跳轉至命令行尾

        Ctrl+u:刪除命令行首至當前光標所在處之前的所有內容

        Ctrl+k:刪除當前光標所在處至命令行尾的所有內容

        Ctrl+l:清屏,類似clear命令

        Ctrl+z:把當前命令送至後臺執行

    10、變量

1)bash變量類別
    本地變量:只對當前shell進程有效,對其他shell進程無效,包括當前進程的子進程
            變量賦值:VAR_NAME=VALUE
    環境變量:對當前shell進程及其子shell有效,對其他的shell進程無效
            變量賦值:export VAR_NAME=VALUE
            撤銷變量:unset VAR_NAME
            只讀變量:readonly VAR_NAME
    局部變量:對shell腳本中某代碼片段有效,通常用於函數本地
            變量賦值:local VAR_NAME=VALUE
    位置變量:對命令參數生效
            如:$1指參數1,$2指參數2
    特殊變量:例如$?,顯示狀態返回值
              $RANDOM 顯示隨機數字
2)變量命名
    1、不能使用程序中的關鍵字;如:if,case,for
    2、只能使用數字、字母和下劃線,且不能以數字開頭
    3、命名要規範,見名知義
3)變量類型
    數值型,字符型,布爾型
    類型轉換

    11、bash的配置文件

profile類:爲交互式登錄的用戶提供配置
        全局:/etc/profile    /etc/profile.d/*.sh
        用戶:~/.bash_profile
        功用:設定環境變量,運行命令或腳本
bashrc類:爲非交互式的用戶提供配置
        全局:/etc/bashrc
        用戶:~/.bashrc
        功用:設定本地變量,定義命令別名
登錄類型:交互式,直接通過終端輸入帳號和密碼登錄,su - username
          非交互式,圖形界面下打開的終端、執行腳本、su username
交互登錄的用戶:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互登錄的用戶:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


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