由于這部分的內(nèi)容有點(diǎn)多籍胯,擠在一篇文章里不容易理清思路酥艳,長篇幅也容易使人倦怠篡九,那么貓毛就把它切分成小的知識塊乙各,咱們就從這些細(xì)碎的小文章中墨礁,一點(diǎn)點(diǎn)成長吧~
1.環(huán)境變量的功能
1.1 常見的環(huán)境變量
在命令行內(nèi)輸入 “env”,就可以查看目前shell環(huán)境下的所有環(huán)境變量與其內(nèi)容耳峦。貓毛充分利用了MAC筆記本的Terminal恩静,利用它來練手BASH了:
- HOME
代表用戶的家目錄,還記得 Linux 系統(tǒng)基本操作 中蹲坷,我們可以通過cd
或者cd ~
直接回到自己的home目錄驶乾,就是取用了HOME變量。 - SHELL
其內(nèi)容代表目前環(huán)境使用的SHELL是哪支程序循签,貓毛的MAC使用的是 /bin/bash - PATH
與文件搜索有關(guān)级乐,它就是執(zhí)行 文件搜索 的路徑!
不同目錄以:
分隔县匠,文件的搜尋順序是依序由PATH的變量內(nèi)的目錄來查詢风科,所以,目錄的順序在高效搜索文件時就顯得非常重要了 - LANG
代表語系數(shù)據(jù)乞旦,一般來說贼穆,我們中文編碼通常是zh_TW.Big5 或者 zh_TW.UTF-8
1.2 環(huán)境變量與自定義變量
??我們通過env
可以獲取當(dāng)前的環(huán)境變量信息,除了環(huán)境變量兰粉,bash還有一些與bash操作接口有關(guān)的變量故痊,以及用戶自己定義的變量(還記得上一節(jié)提到的“變量設(shè)定”嗎?設(shè)定變量就是在自定義變量啊~)
如果我們想查看當(dāng)前shell的所有變量信息玖姑,僅僅通過“env”獲取環(huán)境變量就不能滿足我們的“好奇心”了愕秫,那就要通過“set”來觀察了浊仆。
命令行中輸入set
后,屏幕里密密麻麻就出現(xiàn)了一大堆符號豫领,還是拿鳥哥里面的圖片來做解釋吧:
一般來說抡柿,不論是環(huán)境變量還是與shell操作接口 相關(guān)的變量,通常都設(shè)定為大寫字符等恐≈蘖樱基本上,在Linux預(yù)設(shè)的情況下课蔬,使用{大寫的字母}來設(shè)定的變量為系統(tǒng)內(nèi)定需要的變量囱稽。這也是為什么我們上一節(jié)在學(xué)習(xí)“變量設(shè)定”時,鼓勵大家使用小寫字母來設(shè)定自定義變量的原因二跋,講幾個其中比較重要的變量吧战惊。
-
PSI 提示字符的設(shè)定
-- \d : 可顯示出日期格式
-- \H : 完整的主機(jī)名
-- \h : 僅取主機(jī)名在第一個小數(shù)點(diǎn)之前的名字
-- \t :顯示時間,為24小時格式的「HH:MM:SS」
-- \T : 顯示時間扎即,為12小時格式的「HH:MM:SS」
-- \A : 顯示時間吞获,為12小時格式的「HH:MM」
-- \u : 顯示使用者的賬號名稱
-- \w :完整的工作目錄名稱
-- \W : 利用 basename 函數(shù)取得工作目錄名稱,所以僅會列出最后一個目錄名
-- # : 下達(dá)的第幾個指令
-- $ :提示字符谚鄙,如果是root時各拷,提示字符為#,否則就是$了
怎么更改自己登陸服務(wù)器后的提示符闷营?以圖為例吧:
示例 :設(shè)置提示符 - $
“$” 本身也是個變量烤黍,它代表的是“目前這個shell的線程代號”,也就是所謂的PID(Process ID),如果想知道我們的shell的PID傻盟,直接輸入命令$$
就可以了速蕊。 - ?
? 也是一個特殊的變數(shù),這個變數(shù)是:上一個執(zhí)行的指令 回傳的值
當(dāng)我們執(zhí)行某些指令時娘赴,這些指令都會回傳一個執(zhí)行后的代碼规哲。一般來說,如果成功得執(zhí)行該指令筝闹,會回傳一個0值(說明沒有出現(xiàn)問題)媳叨,如果執(zhí)行發(fā)生錯誤,就會回傳“錯誤代碼”关顷,一般都是非0數(shù)值。通過圖中的示例你會理解得更方便:
理解“ 武福?”這個變數(shù)
1.3 自定義變量轉(zhuǎn)成環(huán)境變量 (export)
當(dāng)你登入Linux并取得一個bash之后议双,你的bash就是一個獨(dú)立的程序,這個程序的識別使用的是一個稱為程序標(biāo)識符的東西捉片,也就是PID平痰。接下來你在這個bash底下所下達(dá)的任何指令都是由這個bash所衍生出來的汞舱,那些被下達(dá)的指令就被稱為子程序了。
子程序僅會繼承父程序的環(huán)境變量宗雇,子程序不會繼承父程序的自定義變量昂芜,所以需要 export 變量名稱
,將自定義變量轉(zhuǎn)成環(huán)境變量赔蒲。
1.3 語系變量
我們的Linux到底支持了多少語系泌神?可以使用"locale"這個命令來查詢:
為什么我們在查詢某個數(shù)據(jù)的說明文件的時候,有時候會出現(xiàn)亂碼舞虱,這可能是由于我們使用的語系不同而產(chǎn)生的欢际,可以看到上圖??,貓毛的mac自帶bash的語系變量有很多矾兜,但是實際上损趋,我們只需要設(shè)定"LANG"和“LC_ALL”就好了。(語系文件都放置在 user/lib/locale/目錄中)
1.4 變量的有效范圍
自定義變量是有使用范圍的:自定義變量只能存在于指定子程序中椅寺,其他子程序和父程序是不可以引用的浑槽。
可以這么理解:
環(huán)境變量=全局變量 global variable
自定義變量=局部變量 local variable
但是,export這個指令返帕,可以使“自定義變量” 轉(zhuǎn)變?yōu)?/strong> “環(huán)境變量”括荡。環(huán)境變量是可以被父程序和其他子程序引用的。
1.5 理解幾個與變量相關(guān)的命令
簡單理解一下吧溉旋,我覺得應(yīng)用并非很廣泛
-
read
作用就是自定義變量畸冲,最大的特點(diǎn)便是可以與使用者對談,什么是“對談”观腊?截鳥哥的圖理解吧邑闲。
read的用法 - declare
declare 的功能:宣告變量的類型。
它一般來講是這么使用的:
declare + 參數(shù) + 變量
它的參數(shù)有以下幾種:
-a : 將后面的變量定義為 數(shù)組 (array)類型
-i : 將后面的變量定義為 整數(shù)數(shù)字 (integer)類型
-x : 用法與export一樣梧油,將后面的自定義變量 變成 環(huán)境變量
-r : 將變量設(shè)定稱為 readonly 類型苫耸,該變量不可以 被更改內(nèi)容 和 unset
(1) 先來學(xué)習(xí)一下 -i 的用法吧:
declare -i 的用法
想知道為什么是吧?
實際上儡陨,變量類型默認(rèn)為“字符串”褪子,所以只有通過' -i '指定變量類型為 整數(shù)數(shù)字 后,系統(tǒng)才會認(rèn)為“1+2” 是“計算式”而不是“字符串”
bash環(huán)境中的數(shù)值運(yùn)算骗村,預(yù)設(shè)最多僅能到達(dá)整數(shù)形態(tài)
eg: 6/5結(jié)果是1
(2) 其他幾個參數(shù)的應(yīng)用
鳥哥總結(jié)的很好嫌褪,直接上鳥哥的圖吧
1.6 數(shù)組(array)變量類型
這里只要了解一下數(shù)組這個變量就可以了
var[index]=content
var -- 數(shù)組名
index -- 數(shù)字代號(需要[ ]設(shè)定)
content -- 對應(yīng)內(nèi)容
2. 文件系統(tǒng)及程序的限制關(guān)系
了解 ulimit 命令可以限制用戶的某些系統(tǒng)資源 就可以了