Shell是工作站上一般使用者與系統溝通的主要介面,目前工作站提供以下數個shells供使用者選擇:
sh(Bourne Shell)
bash(Bourne-again Shell)
tcsh(TENEX C Shell)
csh(C Shell)
zsh(Z Shell)

sh 最早由AT&T Bell Labs的Stephen R. Bourne開發出sh(bourne shell),奠定了目前各shells的基礎功能,例如:變數、pipe、指令替換(command substitutions)等。
 
csh 同時也有另一派從柏克萊大學發展出來的csh(C shell),特色為其syntax較接近C語言,並增加了可直接在shell內進行基本運算、測試等功能並改進使用者互動的介面。
 
GNU計畫改良sh並開發出bash(bourne-again shell),增加了例如shell內基本數學運算($((…)))、改良版的test指令([[)、shell內的正規表示式(regular expression)、關聯數組(associative array)等功能,成為目前GNU/Linux下主流的shell。
 
tcsh(TENEX C shell)是從csh改良而成的shell。
 
zsh(Z shell)是較後期才開始發展的shell,特色為有十分強大的指令直譯器(command interpreter),集各家之大成,並增加許多的功能,例如:可程式化的指令自動補完、修正拼字錯誤等。
 
各種不同shell的差異
各種shells在一般使用上(例如:編譯與執行程式、編輯文件、移動或複製檔案)其實差異並不大,因為shell的工作只是執行程式並將參數傳給程式而已,然而當開始接觸到基本的shell scripting時便需注意到各shells之間的差異,例如:變數的宣告與export、輸出入重導向、迴圈與判斷式的syntax、globbing等,建議選擇自己熟悉的shell使用。
 
不管你的Login Shell 是那一種shell,每一個shell都有它自己的 Start Files ,我們設定理想環境時所需使用的指令與變數的設定,都可以寫在這些 Start Files中,在login 時就加以執行或設定:
 
csh 啟動 (依照所列順序):
.cshrc – 每次都會讀取
.login – login shell 才會讀取
 
tcsh 啟動 (依照所列順序):
/etc/csh.cshrc – 每次都會讀取
/etc/csh.login – login shells 才會讀取
.tcshrc – 每次都會讀取
.cshrc – 假如沒有 .tcshrc 在的話
.login – login shells 才會讀取
 
bash 啟動 (依照所列順序):
/etc/profile – login shell 才會讀取
.bash_profile – login shell 才會讀取
.profile – 如果沒有 .bash_profile,則會在 login 時讀取
.bashrc – interactive non-login shell 啟動新的shell時被讀取,並執行
 
zsh 啟動 (依照所列順序):
.zshenv – 若無 -f 就會讀取
.zprofile – login shell 才會讀取
.zshrc – interactive shell 若無 -f 就會讀取
.zlogin – login shell 結束之前

bash 的初始化過程是這樣的:
 
1. bash 檢查文件/etc/profile 是否存在,如果存在 bash 就讀取該文件,否則跳過
2. bash 檢查主目錄下的文件.bash_profile 是否存在,如果存在 bash 就讀取該文件,否則跳過
3. bash 檢查主目錄下的.bash_login 是否存在,如果存在 bash 就讀取該文件,否則,跳過
4. bash 檢查主目錄下的文件.profile 是否存在,如果存在 bash 就讀取該文件,否則,跳過。
5. bash 最終讀取的設定檔是 .bashrc 只要將自己喜好的設定寫入該檔,不論原來系統做了什麼設定值,都可以使用屬於自己熟悉的環境。
sec16

Tags: , , , , , ,