簡單瞭解Shell指令碼

在軟體領域,

語言

主要分為兩大類,

指令碼程式設計(scripting)語言

編譯型(compiled)語言

許多大型或中型的程式都是用編譯型語言寫成,例如C、C++或是JAVA。用編譯型語言寫成的程式,從

原始碼(source code)

轉換成

目的碼(object code)

,便能直接透過計算機來執行。(JAVA並不完全是這樣,但很接近這種說法。)

編譯型語言的好處是

高效

,而因為高效,所以編譯型語言多是運作於底層,處理的是位元組、整數、浮點數或是其他機器層級的物件。

例如,在C++裡,進行“將一個目錄裡所有的檔案複製到另一個目錄中”的簡單操作,會非常麻煩,也很困難。

指令碼程式語言,通常是

解釋型(interpreted)

的。這一類程式的執行,是由

直譯器(interpreter)

讀入程式程式碼,並將其轉換成內部的形式,再執行。直譯器本身也是一般的編譯型程式。

使用指令碼程式語言,最方便的地方在於指令碼程式語言大多執行在比編譯型語言高的層級,能夠

輕易

處理檔案與目錄之類的物件,但相對的,指令碼程式語言的效率不如編譯型語言。

一般常用的指令碼程式語言有Python、Ruby和Shell。

簡單瞭解Shell指令碼

特別是Shell指令碼,可以

在各UNIX系統之間通用

,並且經過了POSIX的標準化,可以應用到很多系統上,例如使用比較廣泛

紅帽Linux(Red Hat)系統

現在,我們從一個簡單的指令碼開始,在紅帽Linux系統上使用。

比如,我們想知道目前系統上有多少使用者登入,可以輸入

who命令

簡單瞭解Shell指令碼

輸入who命令顯示登入使用者

可以得知,當前的系統有兩個使用者登入。由於是在虛擬機器上的作業系統,因此列出來的使用者很少,

tty1

指的是

文字介面

,就是當前開啟的命令視窗,

pts/0

指的是開啟的

第一個終端

,若是再有另外一個終端開啟,就是pts/1。

在很多大型的、多使用者的系統上,who命令所列出來的表會很長,這個時候統計使用者數就很麻煩,對此,可以用

wc程式

。wc程式是一個

字數計算程式

,可以計算出

行數(line)

字數(word)

、和

字元數(character)

。使用wc -l命令,只算行數。

簡單瞭解Shell指令碼

計算使用者數

|

”是

管道(pipeline)符號

,可以在兩個程式之間建立管道。who | wc -l命令就是who的輸出,成了wc的輸入,最後得出的結果就是已登入使用者的個數。

接下來,就是把這條命令輸入一個一般的檔案中,再給該檔案賦予執行的許可權,大體流程如下:

簡單瞭解Shell指令碼

命令轉換成檔案的大致流程

我們先來建立檔案,按照流程輸入。

簡單瞭解Shell指令碼

建立檔案

可以透過

ls命令

檢視檔案是否建立,再透過

cat命令

檢視檔案內容。

然後再賦予檔案執行的許可權,用

chmod命令

簡單瞭解Shell指令碼

賦予檔案執行許可權

先用

ll命令

檢視各個檔案的狀況,可以看到新建的nusers檔案的許可權狀態為-rw-rw-r——,沒有末尾的x,也就是沒有

執行許可權

輸入命令chmod +x nusers,給檔案nusers賦予執行許可權,再用ll命令檢視,成功賦予執行許可權。

最後,直接使用該檔案。有兩個命令可以執行,一個是

./

,一個是

sh

簡單瞭解Shell指令碼

執行檔案

nurses就是一個簡單的

指令碼檔案

。一般而言,開發一個小型的Shell指令碼,首先要在

命令列(command line)

上測試,然後確認能夠完成工作的合適語法,再將編寫的程式語言放入獨立的指令碼檔案中,設定相應的執行許可權,這樣一個小型的指令碼檔案就可以直接使用了。