Linux 之 Bash -- shell 的變量功能(二)

由于這部分的內(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了:


環(huán)境變量
  • 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"這個命令來查詢:


用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é)的很好嫌褪,直接上鳥哥的圖吧


declare 參數(shù)的使用示例

1.6 數(shù)組(array)變量類型

這里只要了解一下數(shù)組這個變量就可以了
var[index]=content
var -- 數(shù)組名
index -- 數(shù)字代號(需要[ ]設(shè)定)
content -- 對應(yīng)內(nèi)容

了解數(shù)組

2. 文件系統(tǒng)及程序的限制關(guān)系

了解 ulimit 命令可以限制用戶的某些系統(tǒng)資源 就可以了

ulimit的使用

ulimit的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胚股,隨后出現(xiàn)的幾起案子笼痛,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缨伊,死亡現(xiàn)場離奇詭異摘刑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刻坊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門枷恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谭胚,你說我怎么就攤上這事徐块。” “怎么了漏益?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵蛹锰,是天一觀的道長。 經(jīng)常有香客問我绰疤,道長铜犬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任轻庆,我火速辦了婚禮癣猾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘余爆。我一直安慰自己纷宇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布蛾方。 她就那樣靜靜地躺著像捶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桩砰。 梳的紋絲不亂的頭發(fā)上拓春,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音亚隅,去河邊找鬼硼莽。 笑死,一個胖子當(dāng)著我的面吹牛煮纵,可吹牛的內(nèi)容都是我干的懂鸵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼行疏,長吁一口氣:“原來是場噩夢啊……” “哼匆光!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起隘擎,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤殴穴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后货葬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體采幌,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年震桶,在試婚紗的時候發(fā)現(xiàn)自己被綠了休傍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹲姐,死狀恐怖磨取,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柴墩,我是刑警寧澤忙厌,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站江咳,受9級特大地震影響逢净,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歼指,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一爹土、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧踩身,春花似錦胀茵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至附鸽,卻和暖如春脱拼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拒炎。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工挪拟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人击你。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓玉组,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丁侄。 傳聞我的和親對象是個殘疾皇子惯雳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354