Next: 執行shell script與subshell
Up: 簡介
Previous: 簡介
  Contents
shell是一個接受使用者命令後,請求作業系統執行的一個應用程式,有人會把shell
畫畫包在kernel外面然後在包一層AP,我比較不贊同這種畫法啦,
對於我來說shell也只是另外一種application程式而已,其實它跟gimp, netscape
等等是一樣的東西,只是會被login叫出來。所以他是可以替換的一種應用程式。
用C program來想,這樣子還可以幫你了解環境變數。
寫一隻shell其實非常簡單,主要是捉到user打的命令後,用fork跑出另一process
(記住unix like是多人多工的然後在要這個child process用exec去執行這個
外部程式例如ls, rm...等等。所以shell內部的運作大概是這樣的)
- shell程式控制住鍵盤螢幕
- 打出prompt等待使用者輸入命令
- 捉到使用者輸入
- fork()一個新process
- exec()命令
- 執行完這個命令又回到shell
在這邊您會看到unix like的執行一個程式都是藉由exec這個system call來執行的,
這是作業系統提供使用者程式執行程式的機制。system call是user程式跟kernel
溝通的唯一管道。
在以前MS DOS時代,一開機後會去執行command.com這隻程式就是shell。
他就會跑出
C:\>
等使用者輸入命令,這個C:就是提示符號(prompt),bourne shell通常prompt是$,
只不過這個dos shell功能相當的差,所以當時有個很有名的4DOS這個shell可以取代
他。(4DOS這個shell其實拿了很多unix上shell的特性。當然跟真的unix shell還是
不能比) 如果您只是用老鼠按一按一些icon,後來的MS-Windows時代,X的時代的
command line shell就被圖形化的介面給取代了。不過執行另一個程式的機制還是一
樣,還是要exec()。
unix like 的系統的命令交談式的shell基本上除了能執行外部命令,主要他可以
''解釋''一些字串來執行,這些字串script的好處是可以設定一些環境。
把多個外部命令集合起來完成一件工作。
例如在Windows下我們也會設定TMPDIR這樣的目錄指到那個目錄去,有些windows程式
會把執行中的一些暫時檔案放在這裡。unix like的shell scripts語法可以有if,
while, for loop等等,搭配一些外部命令,可以隨著環境不同時有不同的設定,
使得一些日常工作維護更得心應手,比老舊的dos shell更
為強大。
sed, awk....,這些外部工具久而久之已經算是標準的unix系統必備的命
令工具,就像winzip可能變成每個windows都會裝的工具。很多工具算是不成文的內定
輔助shell programming工具了。
Cyril Huang
2002-06-13