认识各种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
Bash,Bourne 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 Shell | Ken Thompson | 贝尔实验室 | 1971 | UNIX7前所用Shell;已经实现了*;>|等符号 |
Bourne Shell | Stephen Bourne | 贝尔实验室 | 1977 | UNIX7后所用Shell;UNIX引入变量和流程控制 |
C Shell | Bill Joy | 加州伯克利分校研究生 | 1978 | BSD UNIX所用Shell;语法类C语言风格 |
Tenex C shell | Ken Greer | 卡内基-梅隆大学 | 1983 | 兼容C Shell;引入自动补全和history |
Korn Shell | David Korn | 贝尔实验室 | 1983 | AIX默认Shell;兼容bsh;支持脚本编程 |
Bourne-Again Shell | Brian Fox | GNU(FSF) | 1987 | Linux默认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的主要内容,如果未能解决你的问题,请参考以下文章