[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/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等。
#!/bin/bash同理。
二、区别
GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again Shell) 的符号链接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。
所以也就是在Ubuntu中可以认为/bin/sh就是/bin/dash, 如果打算使用bash, 可直接将/bin/sh软链接到/bin/bash.
Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。
应该说,/bin/sh与/bin/bash虽然大体上没什么区别,但仍存在不同的标准。标记为#!/bin/sh的脚本不应使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash可以)。Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过shell脚本测试存在运行问题。因为原先在bash shell下可以运行的shell script (shell 脚本),在/bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。
上面可以这样理解,使用man sh命令和man bash命令去观察,可以发现sh本身就是dash,也就更好的说明集成Debian系统之后的更改。
相关文章
- Linux用户和组管理——实现系统安全(linux用户和组管理)
- 不可错过的Linux:让你体验最好的事物(linux系统适合做什么)
- 嵌入式Linux开发:从流程到实践(嵌入式linux开发流程)
- 极速搭建Linux系统:选择哪款电脑?(什么电脑用linux)
- Linux清除DNS缓存的简单步骤(linux清除dns缓存)
- Linux中删除组的命令操作(linux删除组命令)
- Linux命令行下查看系统用户信息(linux显示系统用户)
- Linux入门指南:选择最佳学习方式(linux入门用什么书好)
- 脚本Linux下重启Shell脚本实现方法(linux重启shell)
- Linux f参数:含义与使用指南(linux-f什么意思)
- 如何使用Linux快速挂载代理服务器(linux挂代理服务器)
- 从零开始:Linux编程必备软件(linux编程用什么软件)
- Linux运维:让智能硬件全新绽放(什么是linux运维)
- Linux下的文件魔力:探索精彩的文件世界(linux中什么是文件)
- Linux的新分支:探索未知的潜力(linux的分支)
- 与特点Linux的分支特性:多样、可靠、安全(linux的分支)
- 深入解析Linux快照及其用途(linux快照是什么)
- Linux命令大全:目录操作技巧(linux命令目录)
- ?Linux:一次探索之旅(linux到底是什么)
- Linux快速联网安装指南(linux联网安装)
- 如何在 Linux 中挂载 SAN 存储:简明指南(linux挂载san存储)
- Linux Shell编程:为初学者开启新世界(linux shell编程入门)
- Linux下文件合并的命令操作指南(linux 文件合并命令)
- 掌握Linux系统的核心知识:了解command、文件系统、权限、进程管理等。(什么叫熟悉linux系统)
- 腾讯云Linux系统配置指南(腾讯云 linux配置)
- Linux Shell编程:改变你的工作效率(linux的shell编程)
- Linux下常见Shell Command使用技巧(linux常用shell)