初識Shell指令碼

2021-08-21 15:20:33 字數 3108 閱讀 7921

說起shell,我們並不陌生,但很多人又不能很準確的說出shell到底是什麼,所以準確認識shell的定位,是很有必要的。

一:shell的初識

shell的定位:

shell是乙個用c語言編寫的程式,它是使用者使用linux的橋梁,是一種與核心交流的外殼應用程式的統稱。

這個應用程式提供了乙個介面,使用者通過該介面與作業系統核心交流。

shell既是一種命令語言,又是一種程式語言。

shell和bash的關係:

很多人搞不清shell與bash的關係是什麼,舉個例子:

shell:媒婆

bash:王婆(乙個優秀的媒婆)

使用者:單身男

作業系統:隔壁美女

shell指令碼與shell開發環境:

shell指令碼是一種為shell編寫的指令碼程式。

shell程式設計只要有乙個能編寫**的文字編輯器與乙個能解釋的指令碼直譯器的可以。

shell的特點:

解釋非編譯型;

弱型別;

執行模式有互動式和批處理式。

單看這三個特點,相信大部分人是蒙的,沒關係,以下通過**來說明shell的三個特點到底是什麼。

二:編寫簡單的shell指令碼

現在的要求是要在當前目錄下建立五個檔案:

1.在命令列輸入

touch file1

touch file2

…. touch file5

這就是互動式,採用命令列的形式:

2.採用批處理式,把命令寫入shell指令碼:

①檔名最好以「.sh」為字尾,

②第一行必須以「#!」(蛇棒)開頭,後指明直譯器,告訴作業系統這個指令碼需要什麼直譯器來執行,除第一行外,其他行的』#』代表注釋,我們通過which bash來找到直譯器的位置:

現在來編寫**實現在當前目錄建立五個檔案:

該指令碼實現了在當前目錄下建立五個檔案,那麼如何執行呢?

執行shell指令碼:

①chmod u+x test.sh,使其作為可執行程式:

②:作為直譯器引數:直接執行直譯器,引數為指令碼的檔名

現在有乙個最大的問題是,乙個文字檔案怎麼能被執行呢?

shell會fork乙個子程序,子程序通過exec執行./test.sh這個程式;

exec有一種機制,如果執行的是乙個文字檔案,並且第一行用蛇棒指明了直譯器,則用直譯器程式的**段替當前 程序,並且直譯器從開始乙個乙個執行,這個文字檔案被當作命令列引數傳給直譯器。

上面的/bin/bash test.sh,實際上就是父bash呼叫了execl(「bin/bash」,」bash」,」test.sh」,null);

舉個例子,如果指令碼裡只有乙個命令,那麼父bash會建立子程序,子bash通過exec執行該命令,然後命令只有一行,子bash又會建立孫子bash來執行這一句命令。

以上就說明shell是解釋非編譯型。

但是有乙個奇怪現象是:

這個現象是,在指令碼裡執行cd ..之後,目錄發生改變,實際真實的目錄沒有變化,這是很好理解的,因為bash要建立子程序來執行,與父程序不影響。

但是直接在命令列cd .,實際目錄是發生了改變的。

實際上,執行命令,不一定要建立子程序,這些不需要建立子程序的命令叫做內建命令,是由父bash親自執行,可以看做是shell的內部函式。

至於第乙個例子,把cd ..寫入指令碼,因為執行文字必須先fork。

那麼有沒有方法,在執行命令的時候規定:父bash必須親自執行呢?

用 . 或者 source 修飾指令碼,則命令由父bash親自執行。

三:shell變數

shell具有弱變數的特點,shell變數不需要定義,需要時直接使用。

規定:

1.定義變數時不能加空格,否則會被直譯器認為命令加命令列引數。

2.使用變數時,前面必須加『$』。

3.bash把所有變數當成字串。

echo命令用於向視窗輸出文字。

關於括號的問題:

我期望輸出,hehehaha heihei,但是shell將mystring和haha當成了乙個全新的變數名,這個變數名沒有被定義,所以為空。

解決辦法就是:加括號(花括號)

加花括號標明了邊界,就可以解決該問題。

shell指令碼初識

shell指令碼初識 了解shell shell是乙個用c語言編寫的程式,它是使用者使用linux的橋梁。shell既是一種命令語言,又是一種程式語言。指令碼結構 shell指令碼 shell script 即為一種shell編寫的指令碼程式 開頭要以 bin bash或是 bin sh 此特殊符號...

Shell指令碼 初識

1.在一般情況下,人們並不區分 bourne shell 和 bourne again shell,所以,像 bin sh,它同樣也可以改為 bin bash。告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的 shell 程式。2.1 作為可執行程式 將 儲存為 test.sh,並 cd 到相應目...

shell指令碼 初識CGI

cgi 是web 伺服器執行時外部程式的規範,按cgi 編寫的程式可以擴充套件伺服器功能。cgi 應用程式能與瀏覽器進行互動,還可通過資料庫api 與資料庫伺服器等外部資料來源進行通訊,從資料庫伺服器中獲取資料。格式化為html文件後,傳送給瀏覽器,也可以將從瀏覽器獲得的資料放到資料庫中。幾乎所有伺...