Sh 和 Bash 的區別

Fumbani Banda 2023年1月30日
  1. 什麼是殼
  2. 如何查詢當前 Shell
  3. 如何找到可用的 shell
  4. sh 命令及其使用
  5. Bash 及其使用
Sh 和 Bash 的區別

本教程解釋了什麼是 shell,瞭解當前使用的 shell,檢查所有可用 shell 的列表,以及 shbash 之間的區別。

什麼是殼

shell 是一個接受命令的計算機程式。它還解釋命令並將它們傳遞給作業系統進行處理。它充當使用者和作業系統之間的介面,使用者可以通過它與作業系統進行互動。

大多數 Linux 作業系統至少帶有一個 shell 程式。shell 程式將是 BashDash 或兩者。

如何查詢當前 Shell

要了解當前在 Linux 系統上使用的 shell,我們可以閱讀 /etc/passwd 檔案,因為它儲存了使用者帳戶資訊。讓我們執行下面的命令來了解當前的 shell。

grep 命令用於在指定檔案中搜尋字串。下面的命令在位於 /etcpasswd 檔案中搜尋使用者 fumba。當 grep 命令找到匹配項時,它會列印帶有結果的行。

$ grep fumba /etc/passwd

W 可以從下面的輸出中看到,使用者 fumba 的預設 shell 是 bash。

fumba:x:1000:1000:,,,:/home/fumba:/bin/bash

如何找到可用的 shell

Linux 系統中所有可用的 shell 都列在 /etc/shells 檔案中。我們使用下面的 cat 命令來顯示/etc/shells 檔案的內容。

cat /etc/shells

下面的輸出顯示了我們系統上所有可用 shell 的列表。

# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen

sh 命令及其使用

sh 是 Bourne shell 的命令名稱。它是類 Unix 作業系統的標準命令語言直譯器。它從命令列字串、標準輸入或指定檔案執行命令。sh 符合 POSIX 標準。

行動式作業系統介面 (POSIX) 是 IEEE 計算機協會指定的一系列標準,用於維護作業系統之間的相容性。一旦遵循這些標準,這些標準有助於為多個作業系統開發跨平臺軟體。

大多數系統都有/bin/sh 檔案,但它是一個符號連結,不會呼叫 sh。在 Ubuntu 中,/bin/sh 是到 Dash shell 的符號連結。我們可以通過執行下面的命令來檢查。

$ file -h /bin/sh

下面的輸出顯示 /bin/sh 是到 dash 的符號連結。

/bin/sh: symbolic link to dash

讓我們將 #!/bin/sh 新增到指令碼中。

#!/bin/sh

printf "sh points to dash!\n"

上面的指令碼指定 /bin/sh 作為直譯器。然而,由於 /bin/sh 指向 dashdash shell 將作為直譯器執行指令碼。

Bash 及其使用

Bash 代表 Bourne Again shell。和 sh 一樣,它是一個命令語言處理器和一個 shell。然而,bash 是 sh 的超集。它支援 sh 的特性並提供更多的擴充套件和特性。Bash 是 Linux 作業系統的預設 shell。

一開始,Bash 符合 POSIX 標準,但隨著時間的推移,隨著更多功能和擴充套件的新增,它不再遵循 POSIX 標準。但是,bash 仍然可以通過設定 -posix 標誌在 POSIX 模式下使用,如下所示。

$ bash --posix

讓我們編寫一個符合 POSIX 標準的 bash 指令碼。

#!/bin/bash

set -o posix
printf "we are using bash shell!\n"

bash 直譯器將執行上面的指令碼,因為它已在第一行 #!/bin/bash 中指定。

set 命令啟用指令碼中的選項。在我們的例子中,它使 bash shell 能夠在 POSIX 模式下執行指令碼。

作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

相關文章 - Linux Shell

相關文章 - Linux Bash