#!/bin/sh与#!/bin/bash的区别

Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh), 各有优缺点。Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用, 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。

Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。

  1. [email protected]:~$ ls -l /bin/sh /bin/bash
  2. -rwxr-xr-x 1 root root 801808 2010-08-11 03:58 /bin/bash
  3. lrwxrwxrwx 1 root root 4 2012-11-28 08:06 /bin/sh -> dash

应该说, /bin/sh 与 /bin/bash 虽然大体上没什么区别, 但仍存在不同的标准. 标记为 “#!/bin/sh” 的脚本不应使用任何 POSIX 没有规定的特性 (如 let 等命令, 但 “#!/bin/bash” 可以). Debian 曾经采用 /bin/bash 更改 /bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过 shell 脚本测试存在运行问题。因为原先在 bash shell 下可以运行的 shell script (shell 脚本),在 /bin/sh 下还是会出现一些意想不到的问题,不是100%的兼用。

时间: 2024-10-23 22:39:33

#!/bin/sh与#!/bin/bash的区别的相关文章

Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别

一.意思 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径. 其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本. 比如说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等. #!/bin/bash同理. 二.区别 GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again

[shell]Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别

一直以为在shell脚本中#都是代表着注释功能,同样在脚本开始的#!/bin/sh也只是告诉用户这是一个shell脚本,而最近顺手查了下,才发现不是这个意思,分享下面的文章. 转自:http://www.cnblogs.com/EasonJim/p/6850319.html 一.意思 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是此解释此脚本的shell的路径. $ cat /etc/shells可以查看系统支持的shell格式 其实第一句的#!是对脚

/bin/sh 与 /bin/bash 的区别

/bin/sh 与 /bin/bash 的区别,用 : 截取字符串不是POSIX 标准的. 区别 sh 一般设成 bash 的软链 (symlink) [plain] view plain copy print? ls -l /bin/sh lrwxrwxrwx 1 root root 4 Sep 14 04:45 /bin/sh -> dash 在一般的 linux 系统当中(例外如 FreeBSD,OpenBSD 等),使用 sh 调用执行脚本相当于打开了bash 的 POSIX 标准模式

bin/bash 和 /bin/sh 的区别

今天在用ssh Secure shell 连接虚拟机中的Ubuntu编写程序时,想比对一下两个源代码有什么差别,但是在一个ssh 客户端下不断的切换很是费劲.于是想着在主机中再添加一个用户.我原本用ssh Secure shell 登陆用的是root用户.于是想着添加一个sshConnect用户.于是在服务器的终端下通过使用 useradd命令和passwd命令添加了一个sshConnect用户,查看/etc/passwd 文件中的最后一行有sshConnect用户的数据. 但是当我通过ssh

-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录

昨天在windows下用写字板写了个shell脚本,使用winscp上传到linux上运行的时候发现运行不了,提示-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录,经过查找资料发现原因如下: 1.dos格式的文本文件要转换为unix格式的文本文件,在linux上操作如下:#unix2dos job.sh 2.或者vi job.sh set ff=unix wq! 保存退出后就可以运行.

sh和bash的区别

在鸟哥的私房菜的一书中,介绍了UNIX的版本以及众多的SHELL版本. 早在UNIX年代,发展者众多,所以由于shell依据发展者的不同就有许多版本,比如sh,C SHell,K SHell,还有TCSH等,每一种Shell都各有特点.当然也有我们的bash,bash这个shell是Bourne Shell的增强版本,也是基于GNU的架构下发展出来的. sh和bash的区别 因为bash是sh的增强版本,在我们平常实地操作的时候如果sh这个命令不灵了我们应当使用bash. 举个例子来说如果我们使

Linux SHELL中sh和bash的区别

什么是SHELL? shell的中文意思就是贝壳,其实比较类似于我们内核的壳.简而言之就是只要能够操作应用程序的接口都能够称为SHELL.狭义的shell指的是命令行方面的软件,广义的SHELL则包括图形界面. SHELL的版本 在鸟哥的私房菜的一书中,介绍了UNIX的版本以及众多的SHELL版本. 早在UNIX年代,发展者众多,所以由于shell依据发展者的不同就有许多版本,比如sh,C SHell,K SHell,还有TCSH等,每一种Shell都各有特点.当然也有我们的bash,bash这

一次事故再次了解linux的/bin /sbin /usr/bin /usr/sbin的区别

一:事故过程 在公司一台准生产环境(还好是准生产)由于公司一个服务日志级别没有调整为ERROR,导致大量的日志记录到/root 目录下(注意/root 是在/分区下是单独分区且不是很大,切记服务的日志级别不能直接打到/root 目录下,程序服务发布到分区比较大按照linux文件组织结构/var 这类可变目录下.) 直接打满/目录容量.重启了服务器,发现服务器只挂载了/目录. 二:问题解决 根据日志提示找到问题原因,通过df ,du命令找到文件,删除日志,重启解决.这些解决方法不是重点,重点是为什

坑爹的ubuntu /bin/sh

写了一个停止mongodb的脚本,代码片段如下: 1 #!/bin/bash 2 3 # stop mongo 4 echo "stop mongodb..." 5 MONGO_PID=`ps -ef | grep mongod | grep -v grep | awk '{print $2}'` 6 if [[ a${MONGO_PID} == a'' ]] 7 then 8 echo "mongodb is not running..." 9 else 10 k