shell基本知識

豆豆花發表於2020-10-22

一、Linux 與 shell

shell(計算機殼層):在電腦科學中,shell 俗稱殼(區別於核),是指為使用者提供操作介面的軟體。它類似於DOS下的 command.com 和後來的 cmd.exe。它接收命令,然後呼叫相應的應用程式。

Linux 的系統結構如下。最內層的是硬體,然後是核心,shell 介於核心與使用者之間。

shell 的功能:接收使用者的輸入,並且解釋使用者的命令;然後將其傳給系統核心,核心再呼叫硬體來操作。

二、常見的shell

  • Bourne Shell(/usr/bin/sh 或 /bin/sh):

是一個交換式的命令直譯器和命令程式語言。Bourne shell 可以執行為login shell或者login shell的子shell(subshell)。只有login命令可以呼叫Bourne shell作為一個login shell。此時,shell先讀取/etc/profile檔案和$HOME/.profile檔案。/etc/profile檔案為所有的使用者定製環境,$HOME/.profile檔案為本使用者定製環境。最後,shell會等待讀取你的輸入。

  • Bourne Again Shell(/bin/bash):

它用於基於GNU的系統如Linux。大多數的Linux(Red Hat, Slackware, Caldera)都以bash作為預設的shell,並且執行sh時,其實呼叫的是bash。它的特點是免費、功能強大、易用性高。

  • C Shell(/usr/bin/csh):

Bill Joy於20世紀80年代早期,在伯克利的加利福尼亞大學開發了C shell。它主要是為了讓使用者更容易的使用互動式功能,並把ALGOL風格的語法結構變成了C語言風格。它新增了命令歷史、別名、檔名替換、作業控制等功能。

  • Korn Shell(/usr/bin/ksh):

Bourne shell用來程式設計,C shell用來互動。ksh結合了所有的C shell的互動式特性,並融入了Bourne shell的語法。它還新增了數學計算,程式協作(coprocess)、行內編輯(inline editing)等功能。Korn Shell 是一個互動式的命令直譯器和命令程式語言。

三、執行shell

  • 方法一:
#!/bin/bash  #指定shell的型別(在指令碼中指定)
chmod +x ./test.sh  #使指令碼test.sh具有執行許可權
./test.sh  #執行指令碼test.sh

test.sh的指令碼內容:

執行結果:

一定要寫成./test.sh,而不是test.sh若直接寫成test.sh,Linux系統會去PATH裡尋找有沒有叫test.sh的檔案,而只有/bin、/sbin、/usr/bin、/usr/sbin等在PATH裡,我們的當前目錄通常不在PATH裡,所以寫成test.sh會找不到命令,要用./test.sh告訴系統:就在當前目錄尋找。

  • 方法二:

直接在命令列指定shell型別,此時test.sh指令碼中指定的shell為bash會失效。執行結果與方法一相同。

/bin/sh test.sh  #指定的shell為Bourne shell