什么是Shell
Shell應(yīng)該是命令解釋器,將Shell腳本解析成操作系統(tǒng)能理解的操作去執(zhí)行。
Shell腳本就是一系列的命令合集。
Shell的種類
Unix/Linux上常見的Shell腳本解釋器有bash、sh、ash、csh、ksh等,習(xí)慣上把它們稱作一種Shell。我們常說有多少種Shell,其實(shí)說的是有多少種Shell腳本解釋器。
在不同的操作系統(tǒng)中,支持的Shell腳本是不一樣的,不同的Shell腳本的命令和語法方式也有所區(qū)別的。
在Linux下面可以執(zhí)行下面命令,來查看支持的shell的種類
cat /etc/shells
在網(wǎng)上查了下資料,大體上有這么幾種shell吧
Thompson shell
這是世界上第一個(gè)Unix shell,1971年發(fā)行的第一版Unix操作系統(tǒng)就包含了它,是一個(gè)非常簡單的命令行解釋器。它的作者是Ken Thompson。sh
全稱叫Bourn Shell,1976年在貝爾實(shí)驗(yàn)室被開發(fā)出來,為的就是要替代Thompson shell,作者是Stephen Richard (Steve) Bourne。后來為了紀(jì)念作者所以名字叫Bourn Shell,簡稱sh,再后來成了Unix 標(biāo)準(zhǔn)默認(rèn)的shell。csh
全稱叫C Shell,作者是Bill Joy,1978年在伯克利的加利福尼亞大學(xué)時(shí)開發(fā)完成的,主要是為了讓用戶更容易的使用交互式功能,并把ALGOL風(fēng)格的語法結(jié)構(gòu)變成了C語言風(fēng)格。tcsh
全稱叫TENEX/TOPS C shell,是csh的增強(qiáng)版,并且完全兼容csh。它不但具有csh的全部功能,還具有命令行編輯、拼寫校正、可編程字符集、歷史紀(jì)錄、作業(yè)控制等功能。所以后來大家都紛紛用tcsh取代csh。早期的OS X 是預(yù)裝tcsh來作為默認(rèn)的shell的,后來在10.3版本后就把bash作為默認(rèn)的shell了。ksh
全稱叫Korn Shell,作者是David Korn,有很長一段時(shí)間,大家要么選擇Bourne shell,要么選擇C shell,為了改變這種狀況,到了1983年,當(dāng)時(shí)在貝爾實(shí)驗(yàn)室的David Korn開發(fā)了Korn shell。ksh結(jié)合了所有的C shell的交互式特性,融入了Bourne shell的語法,并新增了諸多其他功能。
在2000年前ksh都還一直是AT&T的專有軟件,后來經(jīng)歷復(fù)雜的版本演變和license變更,成為了一個(gè)開源的軟件。原生的ksh一般是指ksh88,AIX操作系統(tǒng)把它作為默認(rèn)的shell,后來經(jīng)歷了多個(gè)版本的演變,比如:ksh93、 ksh93u、 ksh93t、 ksh93v。
后面在其基礎(chǔ)之上又衍生出了多個(gè)shell的變種,如:dtksh、tksh、oksh、mksh、SKsh、pdksh。-
ash
全稱叫Almquist shell,它是一種輕量級的兼容sh(Bourn Shell)的Shell,大小只有92K,對于小內(nèi)存的機(jī)器非常有幫助,但是不提供擴(kuò)展,所以現(xiàn)在使用起來會(huì)覺得不是很方便。它的作者是Kenneth Almquist,在1989年開發(fā)完成,90年代初在BSD版本的LinuxUnix上替代Bourn Shell,成為默認(rèn)的shell。目前BSD衍生版本的LinuxUnix(如NetBSD、DragonFly BSD、MINIX、Android等)上仍然是默認(rèn)的Shell。也有一些Linux的操作系統(tǒng)上也使用ash作為默認(rèn)的shell。Android在Android4.0以下使用ash作為默認(rèn)的shell,以后就是換成了mksh作為默認(rèn)的shell環(huán)境。
具體演變點(diǎn)擊這里查看。
Almquist shell 演化圖
修正:BSD不能算是Linux,算是Unix的開源版本,其衍生版本OpenBSD,NetBSD等也算是Unix啦,這里感謝網(wǎng)友提示。 dash
全稱叫the Debian Almquist Shell,是Debian驅(qū)動(dòng)的一個(gè)ash(Almquist shell)的衍生版本,因?yàn)镈ebian衍生出來的Linux(如Ubuntu)把它作為默認(rèn)的shell,所以才成為一個(gè)影響力比較大的shell種類。bash
全稱叫Bourne Again Shell,作者是Brian Fox,在1989年開發(fā)完成。它是sh(Bourne Shell)的增強(qiáng)版本,GNU工程的一部分,用來替代Bourne shell。它用于基于GNU的系統(tǒng),如大多數(shù)的Linux(Red Hat、Slackware、Caldera)都以bash作為缺省的shell,并且運(yùn)行sh時(shí),其實(shí)調(diào)用的是bash。OS X也把它作為默認(rèn)的shell,Windows也可以通過Cygwin或者M(jìn)inGW來支持。zsh
全稱叫Z Shell,作者Paul Falstad在1990年還是普林斯敦大學(xué)的學(xué)生時(shí)寫了zsh的第一個(gè)版本。zsh名字來源于耶魯大學(xué)教授Zhong Shao,那個(gè)時(shí)候Zhong Shao還是普林斯敦大學(xué)的助理教授。
zsh是在Bourne shell的基礎(chǔ)上擴(kuò)展出來的,經(jīng)歷了大量的改進(jìn)后,又引入了bash、ksh和tcsh的新特性,而且它是開源的,地址在這,很多人都在推崇它,甚至MacTalk都說它是終極Shell。cmd
這個(gè)是Windows下的命令行工具PowerShell
也是Windows下面的命令行工具,支援 .NET Framework 技術(shù)
目前各主要操作系統(tǒng)下缺省的Shell
- AIX下 缺省的是 ksh
- Oracle Solaris 缺省的是 rsh(sh的一個(gè)限制版本)
- FreeBSD 缺省的是 csh
- Linux 大部分缺省的是 bash
- Mac 缺省的是 bash
- Windows 支持 cmd & PowerShell
Android 缺省的 是 ash- Android 缺省的 是 mksh (Android4.0以下是ash)
所以如果想要學(xué)習(xí)shell腳本,應(yīng)該學(xué)bash。而且在Windows上面可以通過Cygwin或者M(jìn)ingw來支持bash。