標籤:
- Unix 簡史
UNIX 最初是由貝爾實驗室(Bell Telephone Laborataries)的電腦科學研究中心開發的,第一版誕生於1970年--也就是在貝爾實驗室退出Multics項目不久.在 UNIX 廣受歡迎的功能中,有許多便是來自Multics 作業系統.
它有下列優勢:
- 系統由使用者自行開發.他們使用這套系統來解決每天遇到的計算問題.
- 研究人員不受拘束地進行實驗,必要時也可以任意變換程式.
- 貝爾實驗室的研究人員都是電腦科學家,他們所涉及的系統不單單自己使用,也分享給同事們---這些人也是電腦科學家,因此衍生出"務實"的設計模式:程式會執行你所賦予的任務,但不會和你進行對話,也不會問你一堆"你確定嗎?"之類的問題.
- 除了精益求精,在設計和問題解決上他們不斷地追求"優雅".關於"優雅"有一個貼切的定義:簡單就是力量(power cloaked in simplicity).
也因此存在如下缺陷:
- 工具程式之間存在許多不一致的地方.
- 組多工具程式有缺陷.
- 有時程式並未經過徹底測試,這使他們在執行的時候一不小心就會遭到破壞.
- 系統的文檔儘管大致上內容完備,但極為簡單,是的使用者在學習的時候很難找到所需要的資訊.
2.軟體工具的原則
很多時候這都是最重要的原則,若程式只做一件事情,那麼無論是設計,編寫,調試,維護,以及組建檔案都容易的多.
文本行是 UNIX 的通用格式.它可以用任何唾手可得的文字編輯器來編輯它,也可以讓這些資料在網路和各種機器架構之間傳輸.舒勇該文字檔更有助於任何自訂工具與現存的 UNIX 程式之間的結合.
Regex(regular expression)是很強的文本處理機制.瞭解它的運作模式並加以實用可以濕度簡化編寫命令指令碼的工作.
在未指明指定檔案名稱的情況下,程式預設會從它的標準輸入讀取資料,將資料寫到它的標準輸出,至於錯位資訊則會傳送到標準錯誤輸出.以這樣的方式來編寫程式可以輕鬆地讓它們成為資料過濾器.
軟體工具的執行過程不該像"聊天"(chatty).不要將"開始處理"(starting processing),"即將完成"(almost done)或"處理完成"(finished processing)這類資訊放在程式的標準輸出中(至少這不該是預設狀態).
3.shell指令碼的目標使用情景
shell 指令碼最長用於系統管理工作,或是用於結合現有的程式以完成小型的,特定的工作.一旦你找出完成工作的方法,把命令串在一起,放進一個獨立的程式或者指令碼裡面,此後只需要執行該程式便能完成工作. 如果你寫的程式很有用,替他人可以利用該程式當做一個黑盒來使用,它使一個可以完成工作的程式,但我們不必知道它如何完成的.
4. 指令碼程式設計語言和編譯型語言的差距
許多大中型程式都是用編譯型語言寫成的,例如 Paxcal,C,C++或 Java.這類程式只要從原始碼(source code)轉換成目標代碼(object code),便能直接通過電腦來執行.編譯型語言的好處是高效,缺點是:他們多半運作與底層,所處理的位元組\整數\浮點數或者其他機器層級的對象.
指令碼程式設計語言通常是解釋型(interpreted)的,這類程式的執行,是由解譯器(interprete r)讀入程式碼,並將其轉換成內部的形式,再執行.注意:解譯器本身是一般的編譯型程式.
使用指令碼程式設計語言的好處是,他們多半運行在比編譯型語言還高的層級,能能夠情已處理檔案和目錄之類的對象.缺點是:他們的效率通常不如編譯型語言.不過權衡之下,通常使用指令碼編程還是值得的:花1個小時寫成的簡單指令碼,同樣的功能用 C 或 C++來編寫實現可能需要兩天,而且一般來說指令碼執行的速度已經夠快了,快到足以讓人忽略它效能上的問題.
shell 似乎是各 UNIX 系統之間通用的功能,並且經過了 POSIX 的標準化,因此 shell 指令碼只要"用心寫"一次,即可應用在各個系統上.因此,使用 shell 指令碼是基於:
shell複習筆記----入門知識