萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux--Unix系列shell程序編寫(上)在線閱讀

Linux--Unix系列shell程序編寫(上)在線閱讀

 *Shell是什麼?
  任何發明都具有供用戶使用的界面。UNIX供用戶使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要強大的多)。 Shell為用戶提供了輸入命令和參數並可得到命令執行結果的環境。
  為了不同的需要,UNIX提供了不同的Shell。現在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)為例,一步步的領略UNIX Shell的強大功能,占先其強大魅力,達到更方便靈活的管理 應用UNIX的目的。
  1.UNIX內核和Shell的交互方法
  啟動UNIX時,程序UNIX(內核)將被調入計算機內存,並一直保留在內存中直到機器關閉。在引導過程中,程序 init將進入後台運行一直到機器關閉。該程序查詢文件/etc/inittab,該文件列出了連接終端的各個端口及其特征。當發現一個活動的終端時,init程序調用getty程序在終端上顯示login等登陸信息。(username和passwd),在輸入密碼後, getty調用login進程,該進程根據文件/etc/passwd的內容來驗證用戶的身份。若用戶通過身份驗證,login進程 把用戶的home目錄設置成當前目錄並把控制交給一系列setup程序。setup程序可以是指定的應用程序,通常setup程序 為一個Shell程序,如:/bin/sh 即Bourne Shell(command出來了,呵呵)。

  得到控制後,Shell程序讀取並執行文件/etc/.profile以及.profile。這兩個文件分別建立了系統范圍內的和 該用戶自己的工作環境。最後Shell顯示命令提示符,如$。(這是以bsh為例,若是csh,為.cshrc,ksh為.kshrc,bash為.bashrc等等)    
  注:(不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或 config.sys文件)
  當shell退出時,內核把控制交給init程序,該程序重新啟動自動登陸過程。有兩種方法使shell退出,一是用戶執行exit命令,二是 內核(例如root用kill命令)發出一個kill命令結束shell進程。shell退出後,內核回收用戶及程序使用的資源。
  用戶登陸後,用戶命令同計算機交互的關系為:命令進程--->Shell程序--->UNIX內核--->計算機硬件。當用戶輸入一個命令,如$ls, Shell將定位其可執行文件/bin/ls並把其傳遞給內核執行。內核產生一個新的子進程調用並執行/bin/ls。當程序執行完畢後,內核取消 該子進程並把控制交給其父進程,即Shell程序。例如執行:
    $ps
    該命令將會列出用戶正在執行的進程,即Shell程序(下來詳細說說,別急現在)和ps程序。若執行:
    $sleep 10 &
    $ps
  其中第一條命令將產生一個在後台執行的sleep子進程。ps命令執行時會顯示出該子進程。
  每當用戶執行一條命令時,就會產生一個子進程。該子進程的執行與其父進程或Shell完全無關,這樣可以使Shell去做其他工作。(Shell只是把用戶的意圖告訴內核,然後該干嘛干嘛:)) 現在windows有個計劃任務(在固定的時間,日期自動執行某任務),其實UNIX很早就有這個功能了,也就是所謂的Shell的自動執行。一些UNIX 資源,如cron可以自動執行Shell程序而無需用戶的參與,(這個功能好象在/var/spool/crotab目錄裡)。


copyright © 萬盛學電腦網 all rights reserved