Linux的Bash Shell詳解

阿豪聊乾貨發表於2017-04-23

一、Bash Shell概述

  1.什麼是bash
          bash是Bourne Again Shell的簡稱,是從unix系統中的sh發展而來的,是使用者和Linux核心互動的工具,使用者通過bash操作核心完成系統的使用和管理。

  2.shell的種類
          /bin/sh(已經被/bin/bash替代)
          /bin/bash(預設的shell)
          /bin/ksh(源自貝爾實驗室,相容bash)
          /bin/tcsh(整合C shell,功能更為強大)
          /bin/csh(已經被tcsh取代)
          /bin/zsh(源自ksh功能更為強大)
          每種shell的功能比較類似,但是語法會稍有不同。

  3.bash的歷史和發展

    

二、Bash Shell的變數概述

  1.變數是代表一些值的符號。

  2.可以通過變數來設定shell或者其他程式。

  3.變數存在於記憶體中。

  4.Linux有自定義變數(local)和環境變數(environment)。

  5.自定義變數和環境變數的作用範圍不同。

  6.可以使用以下指令檢視所有變數

    set可以檢視所有的變數

    env只能檢視環境變數

三、Bash Shell的設定方式

  1.通過自定義變數設定

    variable=value來設定

    $variable來取得變數的值 

    變數名不能以數字或者特殊字元開頭

    如果想在值中有空格存在,則需要用雙引號或者單引號來定義值,如:key="key is one"

    單引號和雙引號的區別在於,雙引號支援拿已存在變數作為值的一部分,如:key="key is $key2"

    unset key命令可以刪除變數

    常見的變數
                HISTFILESIZE:記錄歷史指令儲存的最大值
                HISTSIZE:記錄使用history命令檢視歷史指定輸出的個數最大值
                COLUMNS:終端視窗顯示的寬度
                LINES:終端視窗顯示的高度
                PS1:設定提示符號前面的內容樣式(\d,\h,\t,\u,\w,\!,\$,\l,\#等)

  2.通過別名(Aliases)設定

    alias lss='ls -la'設定別名方式

    使用alias檢視系統中所有的alias

    使用alias aliasName檢視指定別名定義

    type -a alias名稱來檢視別名具體定義描述

    unalias刪除別名定義

  3.通過set指令設定

    set 檢視系統所有變數值

    設定shell內部的屬性值(set -o noclobber, set -o vi)

  4.通過環境變數設定

    自定義變數只能在當前的shell環境中有效。

    環境變數會在整個主機下的shell環境中生效。

    使用export variable name來設定環境變數。

    常用變數介紹
                 HOME:指向當前使用者的家目錄。
                 LANG:應用程式使用何種語言來顯示介面。
                 PWD:指向使用者當前的工作目錄路徑。
                 PATH:
                      系統預設的環境變數。
                      執行一些沒有指定路徑的指令時去該路徑中找。
                      PATH=$PATH.:將隱藏路徑設定到PATH中,會帶來安全性問題。
                      可以使用which指令來找到某個指令所在的位置。

四、Shell startup scripts的概述

  1.Shell startup scripts是使用者登入或其他非登入動作時會自動執行一些shell指令碼

  2.建立自定義變數或者執行set指令設定shell

  3.建立環境變數,設定其他程式

  4.使用alias,簡化後續操作

  5.登入登出的時候執行哪些程式

五、login和non-login shell的詳解

  1.login shell:
            通過完整的登入流程時執行的shell。
            首先會讀取/etc/profile(PATH/USER/HOSTNAME/HISTSIZE等)。
            讀取/etc/profile.d/*.sh(顏色、語言、指令別名等)。
            ~/.bash_profile、~/.bash_login、~/.profile(只依次讀取其中一個)。
            ~/.bash_rc、/etc/bashrc。
            source指令可以載入指令碼的變更,如:source /etc/profile。

  2.non-login shell:
            不需要登入流程就可以執行的shell,如su和原bash下的新bash動作
            ~/.bash_rc、/etc/bashrc
            讀取/etc/profile.d/*.sh
            ~/.bash_logout:
                在登出使用者時會進行該指令碼
                可以執行備份、快取和臨時檔案清理等任務

    

    

相關文章