免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7760 | 回复: 8
打印 上一主题 下一主题

SHELL 杂谈[1]: 种类, 版本及选择  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-10 14:36 |只看该作者 |倒序浏览
SHELL 杂谈[1]: 种类, 版本及选择

凡是使用 *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 万行,
只好做罢。

4. Shell 版本的确定

ksh88,ksh93

# strings /bin/ksh|grep -i version
@(#)Version M-11/16/88i   

# set -o emacs on
# ^V
@(#)Version M-11/16/88i   


ksh93

# echo ${.sh.version}
Version M 1993-12-28 o+


tcsh

# echo $version
tcsh 6.11.00 (Astron) 2001-09-02 (sparc-sun-solaris) options 8b,nls,dl,al,kan,rh,color,dspm


bash

# bash -version
GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)
Copyright 2000 Free Software Foundation, Inc.

# echo  $BASH_VERSION
2.05.0(1)-release

zsh

# echo $ZSH_VERSION
3.0.8     

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

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-11-10 15:06 |只看该作者

SHELL 杂谈[1]: 种类, 版本及选择

my ksh version:
PD KSH v5.2.14 99/07/13.2
my bash version:
GNU bash, version 3.00.0(1)-release (i686-pc-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.

论坛徽章:
0
3 [报告]
发表于 2004-11-10 18:47 |只看该作者

SHELL 杂谈[1]: 种类, 版本及选择

论坛徽章:
0
4 [报告]
发表于 2004-11-11 12:30 |只看该作者

SHELL 杂谈[1]: 种类, 版本及选择

原帖由 "lightspeed" 发表:
, 版本及选择

凡是使用 *INX 的人, 不论是作为 login shell 还是编程,多少都要接触到 Shell。
经过多年的发展, Shell 的种类繁多。除了我们熟悉的 sh,ksh,csh, bash ... 外,
还有各种 free 或商业版本如: R..........

呵呵,补充一下怎么看你当前使用啥shell
推荐两个命令:
echo $0
echo $SHELL

论坛徽章:
0
5 [报告]
发表于 2004-11-11 18:45 |只看该作者

SHELL 杂谈[1]: 种类, 版本及选择

echo $0
echo $SHELL

GOOD!!

论坛徽章:
0
6 [报告]
发表于 2007-06-04 10:46 |只看该作者
楼主好,四楼的补充也很有用。

论坛徽章:
0
7 [报告]
发表于 2007-06-24 02:18 |只看该作者
有用,我说我在SCO UNIX506下执行字符串替换怎么出错呢,这下明白了。

论坛徽章:
0
8 [报告]
发表于 2008-06-05 18:17 |只看该作者

freebsd6.1

# echo $shell

/bin/csh

# echo $0

-csh

# echo $version

tcsh 6.14.00 (Astron) 2005-03-25 (i386-intel-FreeBSD) options wide,nls,dl,al,kan,rh,color,filec

# uname -a
FreeBSD  6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sun May  7 04:32:43 UTC 2006     root@opus.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386

论坛徽章:
0
9 [报告]
发表于 2008-08-20 10:09 |只看该作者
不错不错,学习ing.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP