Shell是LINUX系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
Windows PowerShell 是WINOWS一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。微软这次没有低调,强硬的命名它为PowerShell ,看样子想在SHELL界面里打败BASH。
一、理念论
从理念上 ps 比 bash 先进一代,ps 有完整的、强类型的编程支持,bash 里面全是字符串。Powershell 里面很多的函数比 UNIX 更加正交,如 % 和 ?,可以提供极其可怕的抽象能力,你 bash 就是做不到。
不过针对理念这一说法,也有人提:说PS的OOP理念比shell纯字符串先进的同学请想一想:JavaScript的对象字面量,是用字符串表示对象,这样的一种技术为什么大受欢迎?答案是从使用者友好的角度看,字符串要优于对象,而命令行恰恰是人机交互界面,这就是为什么shell比PS易用的原因,至于比较“理念”哪个先进,对于靠代码吃饭的人来说就是扯淡。
二、用法论
1、bash 快,易用,提示好,难学。写 script,看 script 的时候你想砸电脑。ps 写的 script 清晰,好读,有一点编程基础,就算几乎没学过 powershell 都能猜出来啥是干嘛的,但是比较慢。。。所以说平常交互的话 bash(bash-it, oh-my-git, oh-my-zsh)更好用一些,但是真正写起 script 的时候感觉还是 powershell 爽。
2、如果你受够了bash靠文本解析和环境变量来解决逻辑问题,你会无比渴望一个OO的Shell。——PS简直是大救星。随着PS用多了,你会发现,PS的OO有些走火入魔,你又会开始怀念简单粗暴的bash。
三、技术论
这个不是一两句话能说清楚的。PS包含了BASH很多命令了,甚至我看有想法把BASH所有的命令都移到WIN下,让BASH成为它的一个子集。不过也有人指出肯定是GNU Bash好呀,毕竟Bash作为大量Linux发行版默认的Shell,久经考验。如果两个具休技术细节比较的话,需要长篇大论了。这里有两者具体的技术的比较:http://hyperpolyglot.org/shell。
Windows PowerShell 是一种脚本环境,使用户可以利用.NET Framework的强大功能。
PowerShell 由一个命令行shell和内置在这个.NET框架上的编程语言组成。
PowerShell 采用的cmdlet让能够更深入到系统进程中,这些进程可以制作成可执行的文件或脚本(script)。一条cmdlet是一条轻量命令,比如显示当前目录的Get-Location,访问文件内容的Get-Content和结束运行进程的Stop-Process。
Unix shell不基于.netframework。
我想题主既然主动提问这样的问题,想必是不想看充满技术细节的长篇大论了,因为网上这样的内容非常多,你使用这个问题直接去搜,就能搜到一大片。
所以我也长话短说,尽量用尽可能少的内容直白地讲出它们最核心的区别。
一句话概括,二者定位不同,Linux Shell 是给用户用的,而 PowerShell 是给开发/运维工程师用的,当然前者是包括后者的。
我们知道,使用 Windows 的话,不会 PowerShell 完全没问题。但使用 linux 的话,不会 Shell 寸步难行。这既和两种系统的特性有关,也和 PowerShell 和 Linux Shell 本身有关。
暂且不提操作系统层面的区别,只提这两种语言的区别。二者的理念是有很大区别的。
PowerShell 的理念是,你花些时间和精力把我学好,那以后可以用我做很多复杂的事情,这是一个非常划算的买卖(虽然实际未必如此)。所以它的门槛是有一些高的,但功能更强大一些。
Linux Shell 的理念是,我要尽量简单,你不需要花很多精力就可以用我做一些简单的事情,但如果想做更多复杂的事情,那深入学习也是免不了的,但最好不要拿我做太复杂的事情,我会受不了的。
那么大概就能体会出二者的核心区别是什么了。