shell 變量、環境變量配置文件

 

一、set 和 envlinux

 

輸入命令 env ,回車,能夠獲取到一些系統經常使用的變量信息,見下圖,shell

系統的變量一般都是大寫的英文字母,在等號左邊,右邊是變量的值。vim

PATH 決定了shell將到哪些目錄中尋找命令或程序 HOME 當前用戶主目錄 HISTSIZE 歷史記錄數 LOGNAME 當前用戶的登陸名 HOSTNAME 指主機的名稱 SHELL 前用戶Shell類型 LANG 語言相關的環境變量,多語言能夠修改此環境變量 MAIL 當前用戶的郵件存放目錄 PWD 當前目錄bash

env命令顯示的變量只是環境變量,系統預設的變量其實還有不少,你可使用set命令把系統預設的所有變量都顯示出來。ssh

除了 env 以外,還有一個命令 set ,回車,見下圖,3d

內容較多,不一一截圖。set 也能夠查看變量,它不只僅查看系統內置的變量,還能夠查看用戶自定義的變量。裏面的內容是一些 shell 腳本,看不懂不要緊,這邊能夠不用太關注的。blog

 

自定義一個變量,見下圖,進程

這個和環境變量不太同樣,不是系統內置的,是用戶本身定義的變量。能夠經過 set 查看,見下圖,it

以爲結果不太靠譜的話,能夠用後面這個命令,搜索查找,輸入 /a=1 ,回車,見下圖,登錄

能夠看到 a=111 ,直接輸入 :q ,回車,就能夠退出。若是使用 env 的話就看不到了,見下圖,

 

二、變量

 

系統的環境變量是系統內置的,咱們沒有權限去幹涉,固然能夠經過修改配置文件去更改,可是通常狀況下咱們也不會去更改的。咱們能夠自定義本身的變量,在寫 shell 腳本的時候,常常要使用變量。

先來講說自定義變量的名字,變量名規則:字母、數字、下劃線,首位不能爲數字。舉一些例子,見下圖,

變量值有特殊符號時須要用單引號括起來,見下圖,

那麼雙引號能夠嗎?見下圖,

雙引號也是能夠的,但仍是建議使用單引號。爲何呢?再舉個例子,見下圖,

從上圖中能夠看出,使用雙引號的命令,結果是 a ,沒有識別出雙引號裏面的 $ 。而使用單引號,結果就很是順利,所有識別出來了。全部仍是建議使用單引號。

 

關於變量的累加,舉例子,見下圖,

上圖打馬賽克的位置是,命令手誤輸錯,爲了避免影響命令的連續性,仍是隱藏起來比較好。上圖內容,一連串下來,就能夠大概瞭解一下。$a$b表示累加,雙引號裏面的內容不是賦值,而是區分。當咱們賦值的變量表達式比較複雜的時候,儘可能用雙引號或是單引號區別一下。想保留內容的話,就使用單引號,雙引號表示內容的結果。

 

關於全局變量,見下圖例子,

上圖使用的是 PuTYY 終端,沒法打開多個窗口,全部只有一個 TTY 。若是是 Xshell 上打開了多個窗口,就可使用命令 echo $SSH_TTY 來查看當前窗口的 TTY 。

如今自定義一個變量,見下圖,

在 Xshell 裏面的另外一個窗口中,輸入命令 echo $lys ,結果是空的,表示沒有這個變量。

接下來,再進入一個子 shell ,輸入命令 bash 。shell 其實是一個進程,能夠再打開一個 shell ,至關於又進入了另一個終端。雖然當前仍是在 pts/0 上,可使用命令 pstree 來查看,見下圖,

上圖紅色框框的位置就是當前所在的位置,打開一個新的 bash ,而且運行了命令 pstree 。而 Xshell 上的結果不太同樣,見下圖,

sshd 表示終端,bash 表示進程。

接着上面的操做,這時候輸入命令 echo $lys ,結果是空的,表示咱們自定義的變量僅僅在它的上一層 bash 中生效,見下圖,

使用命令 exit ,能夠退出當前的 bash ,返回上一層。能夠看到變量 lys 又出現了。

通常咱們自定義的變量,僅僅在當前終端,當前 bash 下生效,並且僅此一次,重啓系統以後就失效了。那麼,咱們怎麼操做,可使自定義的變量在全局範圍生效?見下圖,

export 表示全局環境變量,命令執行完畢以後,後面的子 shell 中,這個自定義變量 lys 都是生效的。再進入一個 bash ,見下圖,

也能夠看到,變量 lys 生效了。

有一個狀況,這邊要說明一下,export 適用的環境是當前 sshd 下的日後的全部子 bash ,跟它呈並列關係的其餘兩個 sshd ,自定義變量是不會生效的。若是是在 sshd 下的 bash 裏自定義變量,跟它呈並列關係的其餘 bash 裏,這個變量也不會生效。

而且在當前 bash 裏再往上一層,也不會看到變量。見下圖,

說明 export 全局變量指的是向下的,向上是不生效的。後面寫 shell 腳本的時候會用到。

變量能夠賦值,也能夠取消。見下圖,

輸入命令 unset lys ,就能夠取消變量 lys 。

 

總結:

env         能夠查看環境變量,僅限於一些系統內置的經常使用環境變量。

set          也是查看環境變量,不只能夠查看系統內置的環境變量,還能夠查看用戶自定義的變量。

變量名規則:字母、數字、下劃線,首位不能爲數字。

變量值有特殊符號時須要用單引號括起來。

想保留內容的話,就使用單引號,雙引號表示內容的結果。

echo $a$b             表示變量 a 和 b 的累加。

echo $SSH_TTY     能夠查看當前窗口的 TTY

pstree                    能夠查看當前位置

bash                      能夠向下打開一個子 shell

export                   表示全局變量,向下生效,向上不生效,並列也不生效。

 

三、環境變量配置文件

 

 

本小節的內容分爲兩個層次,系統層次和用戶層次。/etc/開頭是系統層次,~/開頭是用戶層次。關於系統的文件 /etc/profile 和 /etc/bashrc ,這兩個文件咱們不要去動。當咱們有一些需求要編輯這些文件的時候,能夠編輯該用戶下的家目錄。

舉個例子,輸入命令 vim .bash_profile ,回車,見下圖,

這裏面作的更改,僅對該用戶有效,要是打算全局生效的話,須要到 /etc/profile 裏面去作更改。輸入 :q ,回車,便可退出。注意上圖中「. ~/.bashrc」前面的這個黃色的點,這個點和以前介紹過的 source 命令是同一個意思,加載的意思。咱們輸入命令 vim .bash_profile 的時候,會自動調用 ~/.bashrc ,那咱們試着輸入命令 vim .bashrc ,回車,見下圖,

發現該命令自動調用了 /etc/bashrc ,輸入 :q ,回車,退出。每一個用戶家目錄下都有以 . 開頭的隱藏文件。

 

/etc/profile :這個文件預設了幾個重要的變量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。

/etc/bashrc :這個文件主要預設umask以及PS1。這個PS1就是咱們在敲命令時,前面那串字符了。

除了兩個系統級別的配置文件外,每一個用戶的主目錄下還有幾個這樣的隱藏文件:

.bash_profile :定義了用戶的我的化路徑與環境變量的文件名稱。每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該文件僅僅執行一次。

.bashrc :該文件包含專用於你的shell的bash信息,當登陸時以及每次打開新的shell時,該該文件被讀取。例如你能夠將用戶自定義的alias或者自定義變量寫到這個文件中。

.bash_history :記錄命令歷史用的。

.bash_logout :當退出shell時,會執行該文件。能夠把一些清理的工做放到這個文件中。

 

接着講一下 PS1 ,它是在 /etc/bashrc 裏面定義的,輸入命令 vim /etc/bashrc ,回車,進入下圖,

搜索 PS1 ,回車,見下圖,

能夠看到 PS1 。

接着看一下命令前綴 [root@lyslinux-01 ~]#  ,其中 root 就是當前登陸的用戶名,@ 後面的 lyslinux 就是主機名,~ 就是所在的目錄最後一層級。個人linux系統PS1就是[root@lyslinux-01 ~]#  , 來看一下PS1的值,輸入命令 echo $PS1 ,回車,見下圖,

\u 就是用戶, \h 主機名, \W 則是當前目錄,\$ 就是那個 ‘#’ 了,若是是普通用戶則顯示爲‘$’。

上面大寫的 W ,能不能改爲小寫的 w 呢?來試一下,見下圖,

咱們能夠看到,把 w 改爲小寫以後,命令前綴中的目錄就變成絕對路徑了。

接着試一下去掉方括號 [ ] ,見下圖,

上圖中 $ 表示普通用戶,# 表示 root 用戶。

爲了方便區分,也能夠設置帶顏色顯示,輸入命令 PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$' ,回車,見下圖,

 

以上就是 PS1 ,有了 PS1 ,也有 PS2 ,是另一種環境狀態,見下圖,

以上作個瞭解就能夠。

相關文章
相關標籤/搜索