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. auto space advisor

    <pre name="code" class="sql">首先:oracle有自动Job,进行shrink space SQL> select ...

  2. 【转】Linux內核驅動之GPIO子系統(一)GPIO的使用 _蝸牛

    原文网址:http://tc.chinawin.net/it/os/article-2512b.html 一 概述 Linux內核中gpio是最簡單,最常用的資源(和interrupt ,dma,ti ...

  3. NOI2011 兔农

    http://www.lydsy.com/JudgeOnline/problem.php?id=2432 感觉是day1中最难的一题,还好出题人很良心,给了75分部分分. 还是跪拜策爷吧~Orz ht ...

  4. 【Java】在JTable中设置鼠标监听器,点击操作对应数据

    最终效果 鼠标点击JTable中任一数据,修改相应的信息. 确定点击的行和列 package com.dao; import java.awt.event.MouseAdapter; import j ...

  5. Ubuntu mysql安装,还有可视化界面

    安装mysql sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install lib ...

  6. STL采用的标准模板库

    一.map,set set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于 ...

  7. c++ 之 字符和字符串

    字符 1.字符的分类 字符主要包括字母.数字.标点符号.控制字符等 在ASCII编码表中,每一个字符都用一个十进制数来表示 注:ASCII的全称是American Standard Code for ...

  8. 自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6

    阿嚏~~~ 话说本屌丝没啥开发插件的经验,可是天公不作美,公司须要让我自己开发个图片放大的插件 但公司老大的话,宛如吾皇之圣旨,微臣必当肝脑涂地,莫敢不从啊~~~ 于是乎,作为一个超级小白,本人仅仅能 ...

  9. [Javascript] Task queue & Event loop.

    Javascript with Chorme v8 engine works like this : For Chorme engine, v8, it has call stack. And all ...

  10. Dynamics CRM 2016 使用Plug-in Trace Log调试插件

    1.写插件 首先,让我们写一个简单的插件来测试新插件跟踪日志功能.请注意,在下面的示例代码中,我们增加ITracingService的一个实例,以及记录有关插件的执行信息记录的一些键值: 2.注册插件 ...