當我們需要計算機幫我們做點什么的是,最好是選對工具,就像你不會用文本編輯器來做支票簿的核對,不會用計算器來寫策劃方案一樣,所以說程序語言用于不同的需求,本身沒有好壞之分。
shell 腳本常用于系統(tǒng)管理工作,或者用于結合現(xiàn)有的程序以完成特定的工作。一旦你寫出了一個完成工作的辦法,就可以吧用到的命令串在一起,放進一個單獨的程序或者腳本里,以后只要執(zhí)行改程序就能完成工作。如果寫的程序很有用,那么別人可以一用該程序當做一個黑盒來使用,他是一個可以完成工作的成虛,但是我們不必知道他是如何完成的(面向對象的封裝特性)。
首先來看看腳本語言和編譯語言的差異
大型的程序一般都是由編譯語言寫成,例如:C++,Java,C 等。這些程序只要從源代碼(socure code)轉換為目標代碼(object code),便能直接通過計算機來執(zhí)行。
編譯語言的優(yōu)點:效率高,因為他們多半是運行于底層,所處理的是字節(jié)、整數(shù)、浮點數(shù)或其他機器層的對象。例如:在 C++ 里,很難實現(xiàn)目錄的整體移動或者復制。
而腳本編程語言通常是解釋型的。這類程序的執(zhí)行,是由解釋器度日程序代碼,并將其轉換成內部的形式,再執(zhí)行。注意,解釋器本身是一般的編譯型程序。
通俗一點:編譯語言需要編譯器,腳本語言需要解釋器,例如編寫 C++ 程序需要使用 VS,而編寫 HTML 代碼有網(wǎng)頁就行,因為網(wǎng)頁中有自帶的解釋器。
為什么要使用 shell 腳本
使用腳本編程語言的好處是,腳本語言多半運行在比編譯語言還高得層級,能夠情已處理文件與目錄之類的對象。缺點:一般情況下,效率比較低。不過權衡之下,腳本的執(zhí)行速度已經(jīng)很快,快到足以讓人感覺不到性能不高了。常用的腳本編程語言有:shelll,Ruby,javascript 等。
shell 似乎是不同版本的 linux 系統(tǒng)之間的通用功能。shell 腳本只要用心寫,就能應用到很多系統(tǒng)上。
shell 腳本的過人之處
簡單性:shell 是高級語言
可移植性:通過 POSIX(可移植操作系統(tǒng)接口,是 IEEE 為要在各種 UNIX 操作系統(tǒng)上運行的軟件,而定義 API 的一系列互相關聯(lián)的標準的總稱)所定義的功能,可以在不同的系統(tǒng)上執(zhí)行,無需需改。
開發(fā)容易:短時間即可完成一個功能強大又好用的腳本(字啊以后的學習中就能看到)
說了那么多,接下來就是一個簡單的腳本。在 shell 交互界面輸入 who,得到以下信息(這是我的電腦):
root pts/0 2015-06-07 18:37 (192.168.199.114)
這行信息代表系統(tǒng)上有多少人登陸。類似于 QQ 在線人數(shù)。
每個字段的含義分別是登入帳號(root),使用的
終端機(pts/0),登入時間以及從何處登入。
在大型的,多用戶的系統(tǒng)上(服務器的運維上),所列出的列表可能很長(一個頁面不夠顯示),你需要的信息或許可能滾出畫面,這是讓用戶查詢的困難。而這正是進行自動化的好時機。使用 wc(字數(shù)計算)程序,特可以計算出行數(shù)(line),字符數(shù)(character),字數(shù)(word)。使用 wc -l:
只列出行數(shù)。
who | wc -l
計算用戶個數(shù) -----> 我的電腦是一個 1
|(管道)符號可以在兩個程序之間建立管道(pipeline):who 的輸出,成了 wc 的輸入。
將此管道轉成一個獨立的命令。方法是把這條命令輸入一個一般的文件中,然后使用 chmod 為該文件設置執(zhí)行的權限。
#cat > nusers cat
是輸出文件內容的命令,>nusers
表示把內容送到文件 nusers 里而不是默認的屏幕。但是這里 cat 后面沒有參數(shù),意味著 cat 將從鍵盤讀取數(shù)據(jù)輸入到 nusers 中,以 CTRL+D 結束。
^D Ctrl+D 表示 end-of-file
#chmod +x nusers 讓文件擁有執(zhí)行的權限
#./nusers 輸出我們需要的結果。
易尚展示了一個小型 Shell 腳本的典型開發(fā)周期,首先,直接在命令行上測試。然后,一旦找到能夠完成工作的適當語法,再將他們放進一個單獨的腳本里,并未該腳本設置執(zhí)行的權限。之后就能直接使用該腳本了。