Q:什麼是Shell,什麼是shell指令碼?
A:Shell是一種用C語言編寫的程式,它是使用者與Linux作業系統溝通的橋樑。使用者既可以輸入命令執行,又可以利用 Shell指令碼編程,完成更加複雜的操作。它是命令語言、命令解釋程式及程式設計語言的統稱。它的作用就是遵循一定的文法將輸入的命令加以解釋並傳給系統。
命令解釋程式:shell是一個命令語言解譯器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程式所調用。使用者在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。它由輸入裝置讀取使用者輸入的命令,再將其轉為電腦可以瞭解的機械碼,然後執行它。
命令語言:它互動式地解釋和執行使用者輸入的命令。當普通使用者成功登入,系統將執行一個稱為shell的程式。正是shell進程提供了命令列提示符。對普通使用者用“$”作提示符,對超級使用者(root)用“#”作提示符。 一旦出現了shell提示符,就可以鍵入命令名稱及命令所需要的參數。shell將執行這些命令。如果一條命令花費了很長的時間來運行,或者在螢幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷訊號來中斷它(在正常結束之前,中止它的執行)。 當使用者準備結束登入對話進程時,可以鍵入logout命令、exit命令或檔案結束符(EOF)(按ctrl+d實現),結束登入。
程式設計語言(也就是shell指令碼):shell的另一個重要特性是它自身就是一個解釋型的程式設計語言,shell程式設計語言支援絕大多數在進階語言中能見到的程式元素,如函數、變數、數組和程式控制結構。任何在提示符中能鍵入的命令都能放到一個可執行檔shell程式中。 作為程式設計語言,它定義了各種變數和參數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。它雖然不是 Linux系統核心的一部分,但它調用了系統核心的大部分功能來執行程式、建立文檔並以並行的方式協調各個程式的運行。簡單的說shell指令碼就是一個包含若干行Shell或者Linux命令的檔案。對於一次編寫,多次使用的大量命令,就可以使用單獨的檔案儲存下來。以便日後重複使用
第一個shell程式,此程式儲存為mayuan.sh檔案(通常shell指令碼以.sh為尾碼):
#! :這是一個約定的標記,它告訴系統這個指令碼需要什麼解譯器來執行,即使用哪一種Shell。如:#!/bin/sh,#!/bin/bash,#!/bin/csh,#!/bin/tcsh和,#!/bin/ksh等。
第二行以 # 開頭,代表是注釋行,會被解譯器忽略。除了第一行以外,其他行以 # 開頭都是注釋行;sh裡沒有多行注釋,只能每一行加一個#號。如果在開發過程中,遇到大段的代碼需要臨時注釋起來,過一會兒又取消注釋,怎麼辦呢。每一行加個#符號太費力了,可以把這一段要注釋的代碼用一對花括弧括起來,定義成一個函數,沒有地方調用這個函數,這塊代碼就不會執行,達到了和注釋一樣的效果。
第三行定義了一個變數name,值為:mayaun 。注意變數名(name)和 = 間不能有空格,否則執行指令碼時會提示command not found。
第四行echo:命令用於向視窗輸出文本。$(貨幣符號)表示變數替換,即用其後面指定的變數的值來代替變數。
執行shell指令碼有兩種方法:
1、作為可執行程式
將代碼儲存為mayuan.sh,並cd到相應目錄:
chmod +x ./mayuan.sh #使指令碼具有執行許可權
./mayuan.sh #執行指令碼
注意,一定要寫成./mayuan.sh,而不是mayuan.sh,運行其它二進位的程式也一樣,直接寫mayuan.sh,linux系統會去PATH裡尋 找有沒有叫mayuan.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH裡,你的目前的目錄通常不在PATH裡,所以寫成mayuan.sh是會找不到命令的,要用. /mayuan.sh告訴系統說,就在目前的目錄找。如下圖所示:
2、作為解譯器參數
這種運行方式是,直接運行解譯器,其參數就是shell指令碼的檔案名稱,如:
/bin/bash mayuan.sh
這種方式啟動並執行指令碼,不需要在第一行指定解譯器資訊,寫了也沒用。