1. 程式人生 > >bash shell的學習路程(二)

bash shell的學習路程(二)

環境變數的功能:主資料夾的變換、提示符的顯示、執行檔案查詢的路徑等!

詢環境變數:env命令--->enviorment

關注點:HOME、SHELL、HISTSIZE、MAIL、PATH(冒號隔開)、LANG、RANDOM(隨機數生成器--->[0,327667]的自然數)

需求1:除了查詢bash中的環境變數(小寫),以及操作介面有關的變數(大寫),還有使用者自定義的變數(小寫)?--->set 命令

set命令中幾個重要變數(非環境變數)的解釋

(1)PS1:命令提示符的設定---->當每次按下[Enter]按鍵去執行某個命令時,要顯示提示符的時候就會主動讀取此變數

的值!

常見的:[\[email protected]\h \W]\$------->[[email protected] ~]$----->詳見306頁!

(2)$:代表目前這個shell的執行緒代號---->PID------>echo $$

(3)上一個執行命令回傳碼,---->一般來說執行命令的時候都會回傳一個執行後的回傳碼,成功返回0錯誤非0

需求2:將自定義變數轉換成環境變數----->語法: export 變數名稱------>就可以讓該變數繼續存在於子程序中!

思考:自定義變數和環境變數的差異是什麼?

差異點:該變數是否能被子程序所繼續引用

子程序:登入Linux,讀取/etc/passwd獲取當前使用者預設的bash,此時是一個獨立的程序,被稱為PID----->在此bash下執行某個命令都是由這個bash衍生出來的,那些被執行的命令就是子程序!

子程序的特點:子程序只會繼承父程序的環境變數,不會繼承父程序的自定義變數!

應用場景:在引用自己的變數設定給後來呼叫的檔案或其他程式!

具體主控檔案後面呼叫其它附屬檔案(類似函式的功能),但是主控檔案與附屬檔案都有相同的變數名稱,解決辦法:原本的第一個檔案中設定export變數,後面呼叫的變數就可以使用這個變量了,非常適合於shell scripts

補充1:export 不接變數

名稱----->列出所有的環境變數

補充2:環境變數轉成自定義變數---->declare

---------------------------------------------------------------------

查詢Linux支援的語系:locale -a

檢視語系變數:locale----->重點關注LANG

Linux的終端機介面(tty1~tty6)--->黑視窗--->如果設定LANG=zh_TW.big5設定生效後,用man 或者其它資訊輸出時會有亂碼!

原因:終端機介面的環境沒有中文的編碼能力,所以會產生亂碼!但是Windows主機中以遠端連線伺服器的軟體連線到主機,命令列的介面是可以看到中文的,所以此時要在LANG設定中文編碼!

語系檔案的位置:/usr/lib/locale/這個目錄中

-----------------------------------

變數的有效範圍

前提:export命令就存在變數範圍的概念!--->環境變數和自定義變數的作用域

問題3:環境變數的資料為什麼可以被子程序所引用?

記憶體配置問題

--->啟動一個shell------>作業系統分配一個記憶塊(記憶體空間)給shell使用,此記憶體中的變數可讓子程序取用

--->父程序利用export功能,可以讓自定義的變數內容寫入到此記憶塊中,作為環境變數(是臨時的嗎?);

--->當載入一個shell的時候(離開父程序,啟動子程序),子程序會將父shell中的環境變數所在的記憶塊匯入到自己的環境變數中!

--->讓變數在相關程序之間存在,更方便的操作環境!