认识各种shell--shbashdash

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识各种shell--shbashdash相关的知识,希望对你有一定的参考价值。

shell是一个命令行解释器,或者说shell给类unix系统提供了命令行用户界面。shell既是交互性命令语言,同时也是脚本语言。

第一个unix shell是Thompson shell,是由贝尔实验室的Ken Thompson写的,伴随着unix版本1-6发布。

Thompson shell是基于Multics shell开发的(1965),当然Multics shell也有前身,就不深究了。

Bourne Shell由 Stephen Bourne 在贝尔实验室工作期间开发,它的开发是做为 Thompson Shell 的一个替代,作为1977年发布的Unix Version 7 中的默认Shell发布。该程序随着《The UNIX Programming Environment》(作者Brain W. Kernighan、Rob Pike)一书的出版,Bourne Shell开始变得流行起来。其在unix系统的路径为 /bin/sh,但现在的大多数系统不再使用sh了,但/bin/sh文件被保留下来,作为一个软连接到其他Shell上 。

xx@ubuntu:~$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 Aug  6 05:02 /bin/sh -> dash

BashBourne Again SHell ,作为GNU计划的一部分而开发,用来替代sh,是目前大多数linux系统的默认shell ,它基于Bourne shell,吸收了C shell和Korn shell的一些特性。bash完全兼容Bourne shell,也就是说用Bourne shell的脚本不加修改可以在bash中执行。 在系统上的路径为/bin/bash。

其他的shell基本都是基于Bourne Shell二次开发,bash也是,在此不做过多介绍,毕竟bash已成了主流。

但需要注意的是,Ubuntu系统使用的虽然是bash,但sh命令被链接到了dash,所以我们使用sh xx.sh的方式执行脚本时,会以dash方式解析执行,而dash语法与bash由很多差别,所以可能会执行出错,后面见dash和bash的区别。所以,我们执行脚本的最佳方式还是给脚本添加可执行权限,然后直接执行。

名称开发者开发者身份年份亮点
Thompson ShellKen Thompson贝尔实验室1971UNIX7前所用Shell;已经实现了*;>|等符号
Bourne ShellStephen Bourne贝尔实验室1977UNIX7后所用Shell;UNIX引入变量和流程控制
C ShellBill Joy加州伯克利分校研究生1978BSD UNIX所用Shell;语法类C语言风格
Tenex C shellKen Greer卡内基-梅隆大学1983兼容C Shell;引入自动补全和history
Korn ShellDavid Korn贝尔实验室1983AIX默认Shell;兼容bsh;支持脚本编程
Bourne-Again ShellBrian FoxGNU(FSF)1987Linux默认Shell;集大成

echo $SHELL                  #查看当前是什么shell
cat /etc/shells              #查看当前系统有哪些shell
/bin/ksh                     #临时切换shell
chsh -s /bin/ksh [username]  #改变[当前]用户默认shell,重启系统生效
usermod -s /bin/ksh username #改变用户默认shell,重启系统生效

以上是关于认识各种shell--shbashdash的主要内容,如果未能解决你的问题,请参考以下文章

小程序各种功能代码片段整理---持续更新

IOS开发-OC学习-常用功能代码片段整理

python BrickstorOS片段用于获取各种文件系统信息。

如何将 r ggplot 图存储为 html 代码片段

css 我经常忘记的各种CSS片段的集合。

片段与另一个片段重叠