Shell 中文意思貝殼,寓意類似內核的殼。Shell是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 腳本(shell script)是一種為 shell 編寫的腳本程序。常說的shell通常都是指 shell 腳本,但shell和shell script是兩個不同的概念。通常說“shell編程”都是指 shell 腳本編程,不是指開發 shell 自身。
sh(Bourne Shell)是一個早期的重要shell,1978年由史蒂夫·伯恩編寫,並同Version 7 Unix一起發布。
bash(Bourne-Again Shell)是一個為GNU計划編寫的Unix shell。1987年由布萊恩·福克斯創造。主要目標是與POSIX標准保持一致,同時兼顧對sh的兼容,是各種Linux發行版標准配置的Shell,在Linux系統上/bin/sh往往是指向/bin/bash的符號鏈接。
dash (Debian Almquist shell)一種 Unix shell。它比 Bash 小,只需要較少的磁盤空間,但是它的對話性功能也較少。它由 NetBSD版本的Almquist shell (ash)發展而來,於1997年由赫伯特·許(Herbert Xu)移植到Linux上,於2002年改名為 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 Interface 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
————————————————
版權聲明:本文為CSDN博主「心有余力」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lingeio/article/details/96135086