1)什麼是shell?
shell的本意是「殼」的意思,其實已經很形象地說明了shell在linux系統中的作用。shell就是圍繞在linux核心之外的乙個「殼」程式,使用者在作業系統上完成的所有任務都是通過shell與linux系 統核心的互動來實現的。
shell本身是乙個c語言編寫的程式,是使用者和作業系統核心之間通訊的橋梁。
現在的linux系統發行版一般都以bash作為預設的shell。
shell既是一種命令解釋程式,又是一種功能強大的解釋型程式語言。
2)用了做什麼?
作為命令解釋程式,shell解釋使用者輸入的命令,然後提交到核心處理,最後把結果返回給使用者。
shell還是強大的解釋型程式語言,它定義了各種選項和變數,幾乎支援高階程式語言的所有程式結構,例如變數、函式、表示式和迴圈等。利用shell可以編寫shell指令碼程式,類似於 windows/dos下的批處理檔案,但是shell功能更加完善,更加強大。
3)如何工作?
shell中定義了一些內建的命令,一般我們把shell自身解釋執行的命令稱為內建命令,例如下面我們將要講到的cd、pwd、exit,read和echo等命令,都是屬於bash的內建命令。當使用者登入 系統後,shell以及內建命令就被系統載入到記憶體,並且一直執行,直到使用者退出系統為止。除了內建命令,linux系統上還有很多可執行檔案。可執行檔案類似於windows下的.exe檔案, 這些可執行檔案也可以作為shell命令來執行。其實linux上很多命令都不是shell的內建命令,例如ls就是乙個可執行檔案,存放在/bin/ls中。這些命令與shell內建命令不同,只有當它們被調 用時,才由系統裝入記憶體執行。
a read變數名錶 功能:從標準輸入裝置讀入一行,分解成若干字,賦值給shell程式內部定義的變數。
4)shell的命令格式
command [options] [arguments]
— command:表示命令的名稱。
— options:表示命令的選項。選項是包含乙個或多個字母的**,主要用於改變命令的執行方式。一般在選項前面有乙個「-」符號,用於區別引數。例如:[root@webserver ~]#ls -a
一般命令都有很多選項,可以單獨列出它們,也可以在「-」後面把需要的選項都列出來,例如,ls –a –l 或ls –al
— arguments:表示命令的引數。引數就是在選項後面緊跟的乙個或多個字串,這些字串指定了命令的操作物件,如檔案或者目錄。
5)shell的萬用字元
「*」——匹配任意乙個或多個字元
「?」——匹配任意單一字元
「」——匹配任何包含在方括號內的單字元
6)shell的重定向
linux下系統開啟3個檔案,即標準輸入、標準輸出和標準錯誤輸出。使用者的shell將鍵盤設為預設的標準輸入,預設的標準輸出和標準錯誤輸出為螢幕。也就是使用者從鍵盤輸入命令,然後將 結果和錯誤資訊輸出到螢幕。
所謂的重定向,就是不使用系統預設的標準輸入輸出,而是重新指定,因此重定向分為輸入重定向、輸出重定向和錯誤輸出重定向。要實現重定向就需 要了解重定向操作符, shell 就是根據重定向操作符來決定重定向操作的。
a 輸入重定向:用於輸入重定向的操作符有「<」和「<<」,重定向「<<」,這種重定向告訴shell,當前命令的標準輸入為來自命令列中一對分隔號之間的內容(少用)
b 輸出重定向:用於輸出重定向的操作符有「>」和「>>」,如果在「>」後面指定的檔案不存在的話,shell就會自動重建乙個;如果檔案存在的話,那麼這個檔案原有的內容將被覆蓋;如果不 想覆蓋存在的檔案,可以使用「>>」操作符
7)shell的管道
管道可以把很多命令連線起來,可以把第1個命令的輸入當作第2個命令的輸出,第2個命令的輸出當作第3個命令的輸入,依此類推。因此,管道的作用就是把乙個命令的輸出當作下一 個命令的輸入,而不經過任何中間檔案。通過管道符「|」可以建立乙個管道連線
8)shell中的引用
在bash中有很多特殊字元,這些字元本身就具有特殊含義。如果在shell的引數中使用它們,就會出現問題。linux中使用了「引用」技術來忽略這些字元的特殊含義,引用技術就是通知shell 將這些特殊字元當作普通字元處理。shell中用於引用的字元有轉義字元「/」、單引號「'」、雙引號「" "」。
a 轉義字元「/」 如果將「/」放到特殊字元前面,shell就忽略這些特殊字元的原有含義,當作普通字元對待,
b 單引號「'」 將字串放到一對單引號之間,那麼字串中所有字元的特殊含義將被忽略
c 雙引號「" "」 雙引號的引用與單引號基本相同,包含在雙引號內的大部分特殊字元可以當作普通字元處理,但是仍有一些特殊字元即使用雙引號括起來,也仍然保留自己的特殊含義,比 如「$」、「/」和「`」。單引號更嚴格一些。它可以防止任何變數擴充套件。雙引號可以防止萬用字元擴充套件但允許變數擴充套件。
9)shell有兩類變數:
1) 區域性 用set檢視
2) 環境 用env檢視
shell 基礎知識
預設變數 傳入指令碼的命令列引數個數 所有命令列引數值,在各個引數值之間留有空格 0 命令本身 shell檔名 1 第乙個命令列引數 2 第二個命令列引數 區域性變數 在變數首次被賦值時加上local 關鍵字可以宣告乙個區域性變數,例s3 bin bash hello var1 echo hello...
shell 基礎知識
預設變數 傳入指令碼的命令列引數個數 所有命令列引數值,在各個引數值之間留有空格 0 命令本身 shell檔名 1 第乙個命令列引數 2 第二個命令列引數 區域性變數 在變數首次被賦值時加上local 關鍵字可以宣告乙個區域性變數,例s3 bin bash hello var1 echo hello...
shell基礎知識
shell echo python print php echo print unix linux上常見的shell指令碼直譯器有bash sh csh ksh等,習慣上把它們稱作一種shell。我們常說有多少種shell,其實說的是shell指令碼直譯器。bash bash是linux標準預設的s...