[精華] Unix的環境變量

一、SHELL的功能及分類 

SHELL是UNIX作業系統中的'命令編譯器'(Command Inter- 
preter),它基本上是一個常駐的執行程式,它在使用者一簽入 
成功後就立即被載入(可在簽入後以ps指令看到),主要功能則 
在於接受使用者的指令、尋找命令(即檔案)的所在並加以執行。 
因此,SHELL的不同可能直接影響使用者輸入指令的方式、檔 
案尋找的程序及速度等。 

UNIX作業系統的SHELL大致可分爲兩大系統,一是1970年代 
前期由美國貝爾實驗室(BELL LAB)所發展的sh(Bourne Shell), 
它是UNIX系統中的標準SHELL,此一系統後來又發展出ksh(Korne 
Shell)、bash(Bourne Again Shell)等功能更多的介面;另一系 
統是美國柏克來大學(Berkekey)在1970年代後期所發展的csh(C 
Shell),和它屬於同一系統的有tcsh等。 

無論上述的那一種shell,它的基本功能與作用都是相同的, 
它們之間的不同處可能在於對同一動作處理程序上的不同(會影響 
命令處理的速度)、所提供內鍵命令及變數的或多或寡等,其中內 
部命令與變數的多寡直接影響到shell功能的多寡,是使用者在使 
用時最容易直接感受到的。 

在UNIX系統中,使用者可視自己的需要執行sh、ksh、bash、 
csh或tcsh來代替原先使用的shell、改變正在使用的環境;也可 
以用'chsh'指令、輸入想使用的shell的路徑及名稱(如/bin/csh, 
在Y11-Y14機器上還需輸入個人使用者的密碼),改變以後每次 
login時所使用的shell、使自己所使用的環境能最滿足自己使用 
上的需要。 

二、SHELL 的START FILES 

不管你的login shell是那一種shell,每一個shell都有它 
自己的start files,我們設定理想環境時所需使用的指令與設 
定的變數,都可以寫在這些start files中,在login時先後加以 
執行,這些start files的名稱分別是: 

SHELL START FILES 

sh /etc/profile 
$HOME/.profile 
bash /etc/profile 
$HOME/.profile(or $HOME/.bashrc) 
csh None 
$HOME/.cshrc & $HOME/.login 
tcsh None 
$HOME/.cshrc(or $HOME/.tcshrc) 
& $HOME/.login 

如果這些檔案都存在,那麼它們的執行順序將是: 
1. sh系列 /etc/profile -->; $HOME/.profile 
2. csh系列 $HOME/.cshrc -->; $HOME/.login 

在這些start files中,/etc下的profile是系統管理者爲 
大家設定的,一般使用者無法做任何更動,如果對系統管理者的 
設定覺得不夠或不符需要,則可在個人帳號下的.profile、 
.cshrc、.login增加或修正,尤其是對csh及tcsh的使用者而言, 
因爲在/etc下並沒有start files,所以也不會有系統管理者設定 
好的環境可以使用,使用者就必須自行設定所需要的所有的變數 
與指令,否則常會有寸步難行的感覺,最常見的如許多指令都 
因找不到而不能用(因爲沒有設path)、鍵無法使用 
(因鍵的作用沒有定義)...等。 

三、常見的需求與常用的指令 

當我們在UNIX環境中工作,常會爲了使自己使用時更方便而 
產生某些需求,這些常見的需求及其設定方式如: 

1. 希望鍵能有作用 

在$HOME/.profile或$HOME/.cshrc中加上 
stty erase "^H" 

2. 希望在UNIX環境中能使用中文 

在$HOME/.profile(sh系列)中加上 
stty -istrip cs8 
LC_CTYPE=ISO_8859_1 
export LC_CTYPE 
在$HOME/.cshrc(csh系列)中加上 
stty -istrip cs8 
setenv LC_CTYPE iso_8859_1 

3. 希望能有像DOS系統中DOSKEY的功能 
只要是使用bash及tcsh即具備此項功能。 

4. 希望能使用工作站上的漢書編輯器(he) 

在$HOME/.profile(sh系列)中加上 
LANG=big5 
export LANG 
在$HOME/.cshrc(csh系列)中加上 
setenv LANG big5 

5. 希望提示符號能隨着路徑更動而改變 

在sh及csh中並無法做到這個功能,而在bash及tcsh中 
的設定則分別是: 
bash:在$HOME/.profile中加上 
PS1='`PWD`>; ' 
或 PS1="w>; " 
tcsh:在$HOME/.cshrc中加上 
set prompt='%~>; ' 

除了上面所提到針對特殊需要所做的設定之外,在做環境設 
定時常用到的指令還有: 

1. stty 
設定對輸入(input)的定義與如何做輸出,這個指令的 
叄數極爲衆多,我們可用 

stty -a 
看到所有的叄數及其設定,在這些叄數中,常用的有: 

istrip (-istrip) 
將所有的輸入截取成7 bits的資料,然而中文的資 
料都是8 bits的,所以當需要使用中文時,請加上 
'-istrip'這個叄數,以避免輸入的資料被破壞。 

cs7 cs8 
設定每一字元的資料都是7 bits或8 bits的資料, 
因此在需要使用中文時,通常會有如下的設定: 
stty -istrip cs8 
iuclc (-iuclc) 
將標準輸入的大寫字母視爲小寫(或取消)。 

olcuc (-olcuc) 
將小寫的字母以大寫型態輸出(或取消)。 

echo (-echo) 
將所有的輸入由標準輸出處輸出(或取消輸出,即 
在螢幕上看不到自己的輸入)。 

stty除了這些叄數外,還可以用來定義某一個鍵的特定 
功能,如: 
stty erase "^H" 
stty kill "^U" 

2. mesg y (mesg n) 
若在工作時不希望被talk等訊息所打擾,可下'mesg n' 
指令,以避免外來迅息中斷正要進行的工作('mesg y'則是 
恢復與外界的溝通)。 

3. umask [nnn] 
設定新增檔案或目錄的屬性(mode),新檔案或新目錄的 
mode爲系統管理者以create所設定的屬性減去nnn,如系統管 
理者所設定的檔案權利狀態是777,而使用者又自行設定了 
umask 022 
則這個使用者在他個人帳號下的每一個新產生的檔案的權利 
狀態都將會是755(777-022)。 

4. Function 與 Alias 
對於一連串或某一指令,我們可以用function的方式 
(在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash 
中),用一簡短字串來代替這一個或一連串的指令,function 
的用法如: 

vi(){ 
mesg n 
/usr/ucb/vi $* 
mesg y 


其中,'vi'是function的名稱,{}之間是'vi'這個 
function所包含的指令內容,而要注意的是:function的名 
稱不能與shell的內鍵指令(builtin)名稱相同,否則這個 
function即無法成立。 

同樣的功能,alias指令的用法如: 

alias vi 'mesg n; /usr/ucb/vi !*; mesg y' 

其中vi即是''中所包含字串的別名,別名與各shell的builtin 
名稱可以一樣(alias本身也是一個內鍵指令)。 

若我們在某一shell中同時建立一名稱相同的function 
與alias(如在bash中),則alias的執行次序優先於function 
的執行。 

四、常用變數設定 

在UNIX環境中的變數可分爲兩類,一是環境變數(Enviroment 
Variable)、一是shell變數(Shell Variable),二者之間的不同 
處在於:環境變數不會因爲shell間的更替而失去這個變數的作 
用,如PATH是一個環境變數,因此,即使您在設定好PATH之後再 
執行另一個shell(如原來是用sh、而後在sh環境中再執行csh), 
PATH這個環境變數仍能繼續作用,而shell變數(如csh的cwd)則是 
只有在特定的shell下才有作用,一執行其他shell就失去作用。 

在sh及csh二系列各有其不同的設定變數的方式,爲: 

1. Bourne Shell系列 
[VAR]=[STRING or NUMBER] 
export [VAR] 

如果當我們離開shell、進入另一個程式(如tin)之後, 
仍需要使用這個變數,則除了設定這個變數的值外,還需要 
以'export'指令加以宣告,如設定螢幕型態的變數TERM就需 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章