SHELL种类,版本及选择

凡是使用 *INX 的人,不论是作为 login shell 还是编程,多少都要接触到 Shell。
经过多年的发展, Shell 的种类繁多。除了我们熟悉的 sh、ksh、csh、bash ... 外,还有各种 free 或商业版本如: RC、ES、EShell、psh、Zoidberg 等等。种类多了,也就有的标准化的要求,这就是 POSIX 的由来。

其实,就是常见的 Shell,也是功能不同,风格各异。一般来说,人们容易囤于固有的平台,使用 default 的 shell,也就是 /bin/sh。然而,不同的系统的
shell 从名字到 path 都不相同。由于最早的 shell 是 Bourne Shell,所以UNIX 上的 sh 就是 Bourne
Shell。但现在有些混乱了,比如 HP-UX 11i 上已变成 POSIX sh 了。下面列出在个平台上常见 shell。

SHELL     Solaris 9          HP-UX 11i      AIX 5.3         SCO 7.14        LINUX (RedHat)
-----     ---------          ---------      -------         --------        --------------
BSH       /usr/bin/sh        N/A            /usr/bin/bsh    /usr/bin/sh     /bin/ash (bsh -> ash)
CSH       /usr/bin/csh       /usr/bin/csh   /usr/bin/csh    /usr/bin/csh    /bin/csh -> tcsh
TCSH      /usr/bin/tcsh      N/A            N/A             N/A             /bin/tcsh
KSH88     /usr/bin/ksh       /usr/bin/ksh   /usr/bin/ksh    /usr/bin/ksh88  N/A
KSH93     /usr/dt/bin/dtksh  dtksh          /usr/bin/ksh93  /usr/bin/ksh    N/A
BASH      /usr/bin/bash      N/A            N/A             N/A             /bin/bash
PDKSH     N/A                N/A            N/A             N/A             /bin/ksh
POSIXSH   /usr/xpg4/bin/sh   /bin/sh        /usr/bin/psh    /u95/bin/sh     /bin/sh (-> bash)
ZSH       /usr/bin/zsh       N/A            N/A             N/A             /bin/zsh

了解不同的 shell 及版本很重要,尤其当在不同平台之间移植程序时。我就曾帮助一位朋友用 ksh93 写了个 script,结果他在 sco 5.0.5 上不能执行,原来他是 ksh88,不支持 ++ 算符。
1. login shell for root user

root 用户的 login shell 应该选用静态连接(statically linked)版本的 shell,
如  /sbin/sh (solaris, HP-UX, SCO),  /sbin/sash  (RedHat Linux)
以防 share library 丢失或所在分区 mount 不上时, root 用户可 login。

2. 用于编写 script 的 shell,从可移植性和普遍性上考虑,建议用 ksh。
因为 POSIX 1003.2 就是以 ksh 为蓝本的。而 bash 又是遵寻 POSIX 写的。但 bash 除 linux 外,应用较少。而且,有些 ksh93 中的特性 bash 中没有,如 associative arrays。

3. 一般用户的 login shell,参考一下 Russell Quong 的《Shell scripts in 20 pages》:

Overall evaluation

Shell         Interactive     Scripting
sh            C-              B
ksh           B+              A-
bash          A               A
csh           B+              C-
tcsh          A               C+
zsh           A- (?)          A (?)
rc/es         A- (?)          A (?)

由于个人的原因,Russell 对 bash 过于偏好了。其实 zsh 应该是 A+,A+。zsh 基本上是 ksh、bash、csh 的 superset,功能十分强大。建议使用。去这里 http://www.zsh.org/ 可更多的了解 zsh。可惜现在用的人不多。

不过这么多 shell,有一点我不满意,就是都缺少嵌入式的 awk 及 Regex 功能。psh (Perl Shell)是个弥补的例子,但毕竟不是真正的 Shell。本想自己写一个,看了一下 bash 3.0 的 source code,有 30 万行,只好做罢。

对于 sh、csh 就没什么好办法了,因为历史原因,一般无版本信息,除非看 source code。
去这里 http://www.in-ulm.de/~mascheck/bourne/ 看各平台对应的 sh。

 
 
 

bash

bash是Linux标准默认的shell,本教程也基于bash讲解。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。

Linux使用它作为默认的shell是因为它有诸如以下的特色:

  • 可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。
  • 自动通过查找匹配的方式给出以某字符串开头的命令。
  • 包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。

sh

sh 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。

ash

ash shell 是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。

csh

csh 是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。

ksh

ksh 是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。

注意:bash是 Bourne Again Shell 的缩写,是linux标准的默认shell ,它基于Bourne shell,吸收了C
shell和Korn shell的一些特性。bash完全兼容sh,也就是说,用sh写的脚本可以不加修改的在bash中执行。

SHELL种类,版本及选择的更多相关文章

  1. linux shell种类

    1.shell 种类 目前我们的 Linux (以 CentOS 5.x 为例) 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 ...

  2. 码农飞升记-02-OracleJDK是什么?OracleJDK的版本怎么选择?

    目录 1.Oracle JDK 是什么? 2.Oracle JDK 版本如何选择? 1.Java SE 发布节奏以及不同版本的差距 1.Java SE 8 以及之前版本的发布节奏和不同版本的差距 1. ...

  3. 管理 node 版本,选择 nvm 还是 n?

    来源:http://taobaofed.org/blog/2015/11/17/nvm-or-n/ 引子 我本机安装着 nvm,而 node 本来一直运行在 0.x 的老版本上.后来为了跑 ES6,我 ...

  4. 【和我一起学python吧】初学Python,版本如何选择?

    早在四年多以前,在我进入英才网之前,去面试过一家海归创业的公司.他们需要的是有unix开发经验的技术人员,但是因为他们当时所处的阶段对很多成熟 技术人员不是很吸引,所以条件放宽为熟悉面向对象的程序开发 ...

  5. Windbg 32位版本和64位版本的选择

    习惯了Vsiual Studio的兄弟们可能会因为先入为主的原因以为所有的调试器都应该像它那样,其实不然,当你安装Debugging Tools for Windows的时候,你将发现有两个系列的工具 ...

  6. 安装ipython,使用scrapy shell来验证xpath选择的结果 | How to install iPython and how does it work with Scrapy Shell

    1. scrapy shell 是scrapy包的一个很好的交互性工具,目前我使用它主要用于验证xpath选择的结果.安装好了scrapy之后,就能够直接在cmd上操作scrapy shell了. 具 ...

  7. 小飞侠带你精通Python网络编程系列03-Python版本的选择

    1. 目前Python有两个主要版本Python2.X和Python3.X 2. Python2.X最后一个版本是2.7,目前(2018年10月21日)Python3.X最新版本为3.7 3. 很不幸 ...

  8. hadoop商业版本的选择介绍

    记得刚接触到hadoop的时候跟大部分人一样都会抱怨hadoop的安装部署问题,对于一个新手来说这这的是个头疼的问题,可能需要花费一整天的时间才能把分布式环境安装配置好.在刚接触hadoop的一段时间 ...

  9. Hadoop版本的选择问题

    自从2013年下半年开始,hadoop的版本开始了快速的更新换代,这和通信和互联网行业(ICT)的发展是密切相关的.随着移动网络的和宽带网络的覆盖以及数据传输速率的提升,线上的数据有了爆炸式的增长.这 ...

随机推荐

  1. Linux企业级项目实践之网络爬虫(2)——网络爬虫的结构与工作流程

    网络爬虫是捜索引擎抓取系统的重要组成部分.爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份. 一个通用的网络爬虫的框架如图所示:

  2. asp.net 中的错误跳转 customerrors 对html文件不起作用

    在配置web.config时发现customerrors对aspx文件是起作用的,我想通过customerrors来判断是否有html文件时,却不起作用? 这是为什么,如果要起作用.net里该如何操作 ...

  3. dp优化简单总结

    1.二分优化 (使用二分查找优化查找效率) 典型例题:LIS dp[i]保存长度为 i 的上升子序列中最小的结尾,可以用二分查找优化到nlogn 2.数学优化 (通过数学结论减少状态数) 例题1:hd ...

  4. FreeBSD简单配置SSH并用root远程登陆方法

    FreeBSD简单配置SSH并用root远程登陆方法 前言:最近下载了FreeBSD,在虚拟机上安装,第一步先要开启SSH服务,用终端putty软件可以实现在windows系统进行远程管理, 初级 = ...

  5. 负重前行的婚纱线上路 - i天下网商-最具深度的电商知识媒体

    负重前行的婚纱线上路 - i天下网商-最具深度的电商知识媒体 负重前行的婚纱线上路

  6. centerOS安装chkrootkit

    Chkrootkit是一个在本地系统检查rootkit痕迹的工具,它是检查系统二进制文件是否被rootkit病毒修改的一个shell脚本. (1)centerOS安装chkrootkit 安装gcc编 ...

  7. javascript对URL中的参数进行简单加密处理

    javascript的api本来就支持Base64,因此我们可以很方便的来进行编码和解码. var encodeData = window.btoa("name=xiaoming&a ...

  8. tool - 支持TestLink 1.93,将excel格式用例转化成可以导入的xml格式

     tool - 支持TestLink 1.93,将excel格式用例转化成可以导入的xml格式  https://github.com/zhangzheyuk/CaseConvert

  9. WP系统推广难的原因之中的一个之我见

    个人也觉得如今的Android市场几家独大,竞争太激烈.利润空间挤压太严重,有实力的厂家不如尝试剑走偏锋,在其它大佬都还没跟进的时候,把市场投向WP.先入为主,不失为良策! 话说Microsoft不开 ...

  10. const与define的异同

    1. DEFINE是预处理指令,是简单的文字替换:而const是关键字,用于变量声明的修饰. 2. DEFINE替换的结果可以是数值.表达式.字符串.甚至是一个程序:而const只能限定变量为不可修改 ...