next up previous contents
Next: 執行shell script與subshell Up: 簡介 Previous: 簡介   Contents

shell是甚麼

shell是一個接受使用者命令後,請求作業系統執行的一個應用程式,有人會把shell 畫畫包在kernel外面然後在包一層AP,我比較不贊同這種畫法啦, 對於我來說shell也只是另外一種application程式而已,其實它跟gimp, netscape 等等是一樣的東西,只是會被login叫出來。所以他是可以替換的一種應用程式。 用C program來想,這樣子還可以幫你了解環境變數。


寫一隻shell其實非常簡單,主要是捉到user打的命令後,用fork跑出另一process (記住unix like是多人多工的然後在要這個child process用exec去執行這個 外部程式例如ls, rm...等等。所以shell內部的運作大概是這樣的)
  1. shell程式控制住鍵盤螢幕
  2. 打出prompt等待使用者輸入命令
  3. 捉到使用者輸入
  4. fork()一個新process
  5. exec()命令
  6. 執行完這個命令又回到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