1. 程式人生 > >跟大叔一起學Linux之shell第二節shell的變量

跟大叔一起學Linux之shell第二節shell的變量

大叔 變量

shell的變量功能

變量是shell中很重要的一個玩意,我們知道Linux是多用戶、多任務環境,每個人登錄系統時都能取得一個shell,每個人都能夠使用bash執行mail這個命令來獲取自己的郵件,問題是bash是如何得知你的郵件信箱是哪一個?這就需要變量這個玩意了。

1、什麽是變量?

簡單的說變量就是用一串字符來表示一個未知或者變化的內容。舉個例子大家來理解下變量,當一個環境中有兩個人tom和jack兩個人時,tom說:“我怎麽怎麽樣,你....”jack說:“我怎麽怎麽樣,你怎麽怎麽樣”,在他們兩個人的對話中“我”“你”就是兩個變量,大家想想tom說你我的時候,我=tom,你=jack,相反jack說你我的時候我=jack,你=tom,現在大家明白變量是怎麽回事了麽?變量幾個特性:

  • 變量的可變性和方便性:舉例來說明,我們每個賬號都有自己的郵箱默認是以MAIL這個變量來進行訪問的,當a這個用戶登錄時就會取得MAIL這個變量,而這個變量的內容就是/var/spool/mail/a,如果是b登錄時MAIL這個變量的內容就是/var/spool/mail/b,而我們使用mail這個命令來讀取自己的郵箱時,這個程序會自動調用MAIL這個變量,就能夠自動的分辨屬於自己的郵箱了,這樣一來程序員就輕松了許多。我們來仔細思考一下這個例子的運作過程,當我們在登錄Linux時輸入用戶名和密碼後,系統自動的已經將/var/spool/mail這個文件內容改為/var/spool/mail/賬戶名,當其他用戶登錄時按下enter鍵的一瞬間mail這個文件內容就已經發生變化了,這就是變量的好處。這裏我們需要註意小寫的mail是命令,大寫的MAIL是變量名稱

  • 影響bash環境的變量:某些特定變量會影響環境,舉例說明我們前面一直提到很多次的PATH變量,你能不能在任何環境下執行一些命令與這個PATH變量有著很大關系。例如你執行ls這個命令時,系統就通過PATH這變量裏面記錄的路徑順序來查找命令,如果在查找完還是找不到系統會提示你“command not fount”再說的清楚些,由於在Linux下,所有的執行都需要執行碼,而就如同上面提到的,真正以shell來和Linux通信是在正確登錄Linux後,你會有一個bash執行程序,也就是這個bash來跟Linux通訊,在你登錄Linux之前需要一些變量來提供它數據的訪問,這些變量就是環境變量比如:PATH,HOME,MAIL,SHELL等,為了區別環境變量與其他變量的不同我們一般為大寫的。

  • 變量作為腳本程序的好幫手:我們還是舉例說明當我們寫了一個大型的script時,有些數據可能因為用戶使用習慣的不同,比如說路徑好了,由於該路徑在script被使用地方相當的多,如果下次我們換一臺機子的時候,都要修改這些路徑會顯得特別麻煩,這個時候我們通常會利用變量來使script裏的所有路徑都改變。

2、變量的顯示與設置

我們認識變量以後,我該知道變量是什麽樣子的,這個時候我們使用echo這個命令來顯示變量的內容。echo ${變量}比如我們在系統上輸入echo $PATH,當然echo功能不僅僅是顯示變量的內容,具體你可以使用man echo來查看。

3、變量的設置規則

  • 變量與變量的內容以一個等號“=”來連接如下所示:myname=dashu

  • 等號兩邊不能直接接空

  • 變量名稱只能是英文字母和數字,但是開頭不能為數字

  • 變量的內容如果含有空格可使用“”‘’括起來,但是註意雙引號內地特殊字符$等可以保有原來的特性,單引號內地特殊字符代表一般字符

  • 轉義字符\可以將一些特殊的字符變為一般的字符比如$、enter、\、空格、!等

  • 如變量內容中含有其他需要其他命令提供的信息可以使用$(命令)或者`命令`

  • 如果為了增加變量的內容可以使用"$"或者${}

  • 如果變量需要在子環境下使用可以使用export

  • 一般情況下我們的大寫字符變量為系統默認的變量,自己命名的變量為小寫字符

取消變量的命名我們使用的是unset

4、環境變量的功能

用env查看環境變量與常見的環境說明:env是environment的縮寫功能是列出所有環境變量。當然如果使用export也會是一樣的內容,只不過export還有其他額外的功能,我們看看這些變量有什麽功能。

  • HOME代表用戶的主文件,還記得我們可以使用cd去到自己的主文件夾麽?

  • SHELL它告知我們目前這個環境使用的shell是哪個程序?Linux使用的是/bin/bash

  • HISTSIZE歷史大小,這個變量定義了我們歷史命令條數保存的多少

  • MAIL當我們使用mail這個命令來查收我們的郵件時會去讀取的郵件箱文件

  • PATH執行文件的查找路徑,目錄與目錄之間用;號來隔開

  • LANG語言變量,我們的中文編碼一般是zh_CN.gb2321和utf-8

RANDOM隨機數的變量

5、用set查看變量

bash可不只是有環境變量,還有一些操作和接口有關的變量,以及用戶自己定義的變量。set除了環境變量之外,還會將bash內的其他變量全部顯示出來。

PS1提示符的設置(未完待續——)

跟大叔一起學Linux之shell第二節shell的變量