Linux中的Shell bash和sh區別

2021-10-24 15:44:34 字數 2073 閱讀 2522

shell 中文意思貝殼,寓意類似核心的殼。shell是指一種應用程式,這個應用程式提供了乙個介面,使用者通過這個介面訪問作業系統核心的服務。shell 是乙個用 c 語言編寫的程式,它是使用者使用 linux 的橋梁。shell 既是一種命令語言,又是一種程式語言。

shell 指令碼(shell script)是一種為 shell 編寫的指令碼程式。常說的shell通常都是指 shell 指令碼,但shell和shell script是兩個不同的概念。通常說「shell程式設計」都是指 shell 指令碼程式設計,不是指開發 shell 自身。

sh(bourne shell)是乙個早期的重要shell,2023年由史蒂夫·伯恩編寫,併同version 7 unix一起發布。

bash(bourne-again shell)是乙個為gnu計畫編寫的unix shell。2023年由布萊恩·福克斯創造。主要目標是與posix標準保持一致,同時兼顧對sh的相容,是各種linux發行版標準配置的shell,在linux系統上/bin/sh往往是指向/bin/bash的符號鏈結。

dash (debian almquist shell)一種 unix shell。它比 bash 小,只需要較少的磁碟空間,但是它的對話性功能也較少。它由 netbsd版本的almquist shell (ash)發展而來,於2023年由赫伯特·許(herbert xu)移植到linux上,於2023年改名為 dash。

含義

#!是乙個特殊標記,說明這是乙個可執行的指令碼。除了第一行,其他以#開頭的都不再生效,為注釋。

#!後面是指令碼的直譯器程式路徑。這個程式可以是shell,程式語言或者其他通用程式,常用的是bash、sh。

#!/bin/bash

#!/bin/sh

檢視:

cat /etc/shells    檢視系統可使用的shell型別

cat /etc/passwd 檢視當前預設設定,一般在第一行:

root:x:0:0:root:/root:/bin/bash

ll /bin/sh 檢視當前sh狀態

lrwxrwxrwx 1 root root 4 3月 31 2018 /bin/sh -> dash*

區別:

sh 遵循posix規範:「當某行**出錯時,不繼續往下解釋」。bash 就算出錯,也會繼續向下執行。

posix表示可移植作業系統介面(portable operating system inte***ce of unix,縮寫為 posix )。posix標準意在期望獲得源**級別的軟體可移植性。換句話說,為乙個posix相容的作業系統編寫的程式,應該可以在任何其它的posix作業系統上編譯執行。

sh 指令碼:

#!/bin/sh

source err

echo "test sh"

結果為:

testsh.sh: 2: testsh.sh: source: not found

bash 指令碼:

#!/bin/bash

source err

echo "test sh"

結果為:

testsh.sh: 2: testsh.sh: source: not found

test sh

sh 跟bash的區別,實際上是bash有沒開啟posix模式的區別。

簡單說,sh是bash的一種特殊的模式,sh就是開啟了posix標準的bash, /bin/sh 相當於 /bin/bash --posix。

在linux系統上/bin/sh往往是指向/bin/bash的符號鏈結

ln -s /bin/bash /bin/sh

Linux中的時鐘概念Linux中的時鐘概念

linux的時鐘中斷中涉及至二個全域性變數乙個是xtime,另乙個則是jiffies。有乙個與時間有關的時鐘 實時時鐘 rtc 這是乙個硬體時鐘,用來持久存放系統時間,系統關閉後靠主機板上的微型電池保持計時。系統啟動時,核心 通過讀取rtc來初始化wall time,並存放在xtime變數中,即xt...

Linux 中 的程序

1.fork 與vfork 的區別 vfork 使用中父子程序共享虛擬記憶體空間,fork 則不是 vfork保證子程序先執行 而fork的父子程序執行順序是不定的,它取決於核心的排程演算法 example 1 include include include int main else printf...

linux中的查詢

無論在哪個作業系統,查詢都是常用操作,本文說一下linux中的查詢。1.find find最常用,引數也一大把,舉個最常用的 find type f name c exec grep l 這個就是在當前目錄 查詢所有含有 字串的c程式原始檔,通過這個例子,大家應該會用了。find功能很強大,有興趣自...