关于bash和sh

sh/bash/dash/ksh/zsh等Shell脚本
levee
帖子: 3030
注册时间: 2009-10-03 23:31

Re: 关于bash和sh

#16

帖子 levee » 2011-04-29 9:25

tosail2010 写了:
eexpress 写了:fish csh zsh tcsh ksh dsh psh
这是为什么?

谢谢各位的解答,我想多了解一些关于shell的资料。有没有好点的网站或者书。推荐一下。
《LINUX与UNIX SHELL编程指南》不错。
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 关于bash和sh

#17

帖子 chengmoYS » 2011-04-29 10:16

tosail2010 写了:我用的是Ubuntu10.04
输入命令:echo $SHELL
显示:/bin/bash

如果我执行shell脚本,脚本中无#!/bin/sh。
脚本是在bash,还是在sh中运行呢。

首先要了解,/bin/sh是最早的shell版本,多用于UNIX中。
后来陆续出了其他版本的shell。
到了FSF的GNU计划,他们开发了/bin/bash,兼容/bin/sh。
而/bin/bash在Linux中被设置为默认的shell。
所以,现在的Linux像 redhat ubuntu fedora 等都是用的/bin/bash。
但是鉴于/bin/bash是/bin/sh的加强版和完全兼容/bin/sh,也为了方便UNIX程序员的使用,
和使用习惯,通常在Linux会有一个链接/bin/sh指向/bin/bash。

所以我们在Linux中写脚本时,开头那一行写/bin/sh和/bin/bash效果是一样的。
不过呢,为了通用的脚本,建议开头都写/bin/sh,因为其他的shell基本逗兼容/bin/sh,
这样在移植方面有好处。
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 关于bash和sh

#18

帖子 chengmoYS » 2011-04-29 10:40

tosail2010 写了:
eexpress 写了:fish csh zsh tcsh ksh dsh psh
这是为什么?

谢谢各位的解答,我想多了解一些关于shell的资料。有没有好点的网站或者书。推荐一下。

你向了解shell,其实也不用怎么了解,你只需要知道有类bourne的shell和类c的shell的shell
而类c的shell优点在交互上,缺点是编程方面不好
而类bourne的shell语言上形式如algol差不多,在编程方面很好
多看看/bin/sh和/bin/bash就可以了
jiang13824690
帖子: 6
注册时间: 2011-05-28 12:19

Re: 关于bash和sh

#19

帖子 jiang13824690 » 2011-05-28 13:49

lilydjwg 写了:
lexdene 写了:我印象中没有sh这个程序,只有bash这个程序。
而/bin/sh实际上只是一个指向/bin/bash的链接。
您可以看一下,我记不清了。

代码: 全选

ls -l /bin/sh
看看它是不是一个链接。
我表示您的印象非常不准确。Ubuntu 下,sh 是 dash 的软链接。
同你楼上的看法,有些事情要验证了再说,不要误导!
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 关于bash和sh

#20

帖子 tusooa » 2011-06-23 22:51

写shell脚本建议都加上#!/bin/bash
除了确保不出问题的那种(非常简单,追求速度)

代码: 全选

] ls -ld //
头像
AutoXBC
帖子: 1744
注册时间: 2007-10-23 12:54

Re: 关于bash和sh

#21

帖子 AutoXBC » 2011-06-24 0:05

前面有些说法似是而非,什么叫最好写成 /bin/sh 还有最好 /bin/bash 什么的,应该说你到底写了一个兼容 sh 的脚本,还是写了一个用到 bash 特性的脚本,sh 是一个更小的子集。如果是 sh 脚本,就应该写 /bin/sh,至于用户用 bash 解释还是用 dash 是没有差别的,而如果是用到 bash 特性的脚本,就必须写 /bin/bash,由脚本作者决定解释器用户无权选择。如果根本分不清写的是 sh 还是 bash,那就别写了,弄懂区别再写。

http://hi.baidu.com/aaronike/blog/item/ ... d97ea.html
头像
lexdene
帖子: 434
注册时间: 2010-02-21 16:19
来自: 大连
联系:

Re: 关于bash和sh

#22

帖子 lexdene » 2011-06-24 9:16

AutoXBC 写了:前面有些说法似是而非,什么叫最好写成 /bin/sh 还有最好 /bin/bash 什么的,应该说你到底写了一个兼容 sh 的脚本,还是写了一个用到 bash 特性的脚本,sh 是一个更小的子集。如果是 sh 脚本,就应该写 /bin/sh,至于用户用 bash 解释还是用 dash 是没有差别的,而如果是用到 bash 特性的脚本,就必须写 /bin/bash,由脚本作者决定解释器用户无权选择。如果根本分不清写的是 sh 还是 bash,那就别写了,弄懂区别再写。

http://hi.baidu.com/aaronike/blog/item/ ... d97ea.html
这个说的对。
solone1020
帖子: 14
注册时间: 2009-05-12 19:25

Re: 关于bash和sh

#23

帖子 solone1020 » 2011-07-04 14:30

哈,谢谢各位回贴,我是个不负责的LZ哈.
头像
lexdene
帖子: 434
注册时间: 2010-02-21 16:19
来自: 大连
联系:

Re: 关于bash和sh

#24

帖子 lexdene » 2011-07-04 16:27

solone1020 写了:哈,谢谢各位回贴,我是个不负责的LZ哈.
我代表所有人说一句,不客气。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 关于bash和sh

#25

帖子 tusooa » 2011-07-10 12:05

ebok 写了:没有的话就是一组命令的组合,shell内建的条件测试,循环等全部不能用.
没有就默认是/bin/sh

代码: 全选

] ls -ld //
回复