收集整理的对#!bin/sh的认识

本文解释了Shell编程中#!/bin/sh的作用,并强调其对于指定Shell类型及路径的重要性。了解此声明有助于确保脚本能在正确的环境中运行。
第一次学shell编程,看的文章中说shell程序必须以"#!/bin/sh"开始,也就认为是这样了。
虽然知道在shell中以"#"开始的语句都是注释,但也从没认为"#!/bin/sh"也是注释,就像对C语言程序必须有main函数一样毫无怀疑。
但前些时候又听说"#!/bin/sh"也是注释,可有可无,当时觉得真是一个失败,连基本的语法都分不清。
前几天借了一本书,才真正认识了"#!/bin/sh"。
shell编程是以"#"为注释,但对"#!/bin/sh"却不是。
"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在。
如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell。
比如:如果脚本被编写为在Korn Linux中运行,而默认运行shell脚本的为C shell csh,则上述脚本在执行过程中很可能失败。
所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。

转载于:https://my.oschina.net/u/781842/blog/119598

### 含义 `#!/bin/sh` 是脚本文件开头的特殊标识,其中 `#!` 是 Shebang,它后面跟着的 `/bin/sh` 表示此脚本将使用 `/bin/sh` 这个解释器来执行脚本内容。这意味着脚本中的命令会通过 `/bin/sh` 解释执行,脚本的内容实际上是由 `/bin/sh` 这个解释器进行解析和处理的。除了 `/bin/sh`,还可以使用其他解释器,如 `/bin/csh`、`/bin/perl`、`/bin/awk`、`/bin/sed` 等,对应不同类型的脚本[^2]。 ### 作用 指定解释器可以让系统明确知道该使用哪个程序来运行脚本。在执行脚本时,系统会读取 Shebang 行,然后调用指定的解释器来处理脚本中的命令。例如,对于 `#!/bin/sh`,系统会调用 `/bin/sh` 解释器来运行脚本,这样可以确保脚本按照预期的方式执行,避免因解释器不同而产生的兼容性问题[^3]。 ### 使用说明 - **脚本编写**:在编写 Shell 脚本时,通常将 `#!/bin/sh` 放在脚本的第一行。例如,创建一个简单的脚本 `test.sh`: ```bash #!/bin/sh echo "This is a test script." ``` 在这个脚本中,第一行 `#!/bin/sh` 指定使用 `/bin/sh` 解释器,第二行是一个简单的 `echo` 命令,用于输出信息。 - **脚本权限设置**:编写好脚本后,需要给脚本添加可执行权限,使用 `chmod` 命令: ```bash chmod +x test.sh ``` - **脚本执行**:设置好权限后,就可以执行脚本了: ```bash ./test.sh ``` 这样系统会根据 Shebang 行调用 `/bin/sh` 来执行脚本中的命令。 需要注意的是,在不同的 Linux 发行版中,`/bin/sh` 可能指向不同的 Shell 实现。例如,在 Ubuntu 6.10 及之后的版本中,`/bin/sh` 指向 `dash`(Debian Almquist Shell),而 `dash` 比 `bash` 更轻量级,执行速度更快,但可能不完全兼容 `bash` 的所有特性。因此,标记为 `#!/bin/sh` 的脚本不应使用任何 POSIX 没有规定的特性,如 `let` 等命令,而 `#!/bin/bash` 则可以使用这些特性 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值