說起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文件後,傳送給瀏覽器,也可以將從瀏覽器獲得的資料放到資料庫中。幾乎所有伺...