shell中对#!bin/sh的重新认识

本文详细解释了Shell编程中#!/bin/sh的作用,强调其重要性并提供了一个实际应用案例,帮助开发者正确使用该语句,避免常见错误。

开始的时候以为shell程序必须以"#!/bin/sh"开始,今天才明白什么意思,失败啊。。

虽然知道在shell中以"#"开始的语句都是注释,开始认为"#!/bin/sh"也是注释。

今天查了一下,才真正知道了"#!/bin/sh"。

shell编程是以"#"为注释,但对"#!/bin/sh"却不是。(以前修改过配置文件的这个地方,当时觉得纳闷呢,现在想想真挫啊)

"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在。

如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell。

比如:如果脚本被编写为在Korn Linux中运行,而默认运行shell脚本的为C shell csh,则上述脚本在执行过程中很可能失败。

建议"#!/bin/sh",写shell必须有,以使shell程序更严密。

小例子:只显示某个应用对应的log信息,避免全部打印,不利于查看;开发Android应用,在调试的时候非常有用。

packageName=$com.example.abc
pid=`adb shell ps | grep $packageName | awk '{print $2}'`
adb logcat | grep --color=auto $pid

开始的时候加入了"#!/bin/sh",总是提示./check.sh: No such file or directory,去掉之后便可以运行了。


备用:shell编程之给变量赋值的五种方法    

`#!/bin/sh` 和 `#!/sbin/sh` 都是 Shebang 行,用于指定脚本执行时所使用的解释器。 ### `#!/bin/sh` 这是一种常见的 Shebang 写法,`/bin/sh` 通常是系统默认的 shell 解释器的符号链接。在大多数系统中,`/bin/sh` 可能指向 `bash`、`dash` 等 shell 解释器。其作用是告诉系统使用 `/bin/sh` 来解释执行该脚本。使用场景方面,当脚本需要较为通用的解释环境,不依赖于特定 shell 的高级特性,且希望在不同系统上都能有较好的兼容性时,常使用 `#!/bin/sh`。例如编写一些简单的系统管理脚本、自动化部署脚本等,这些脚本需要在多种类 Unix 系统上运行,使用 `#!/bin/sh` 可以确保脚本的可移植性 [^1][^2][^4]。 ### `#!/sbin/sh` `/sbin` 目录通常存放系统管理命令,而 `#!/sbin/sh` 表示使用 `/sbin` 目录下的 `sh` 解释器来执行脚本。不过,在实际情况中,`/sbin` 下一般不会有 `sh` 解释器,因为 `sh` 主要是用于用户级别的脚本解释,并非系统管理特定的解释器。在某些系统中,可能 `/sbin` 是 `/usr/sbin` 的软链接(如 Debian12 中 `/sbin` 是 `/usr/sbin` 的软链接),但通常也不会在这些目录下有 `sh`。所以这种写法相对不常见,使用场景也比较少。如果在特定系统中 `/sbin/sh` 确实存在且有特殊用途,可能是在一些系统管理相关的脚本中,这些脚本需要使用该特定的 `sh` 解释器来执行一些系统级别的操作,但这种情况非常罕见 [^3]。 ### 区别 1. **路径不同**:`/bin` 是系统命令的基本目录,存放着许多常用的用户级命令;而 `/sbin` 主要存放系统管理命令。 2. **用途倾向不同**:`/bin/sh` 用于通用的脚本解释,注重脚本的可移植性和兼容性;`/sbin/sh` 理论上用于系统管理相关的脚本,但实际很少使用。 ### 使用场景总结 - **`#!/bin/sh`**:适用于大多数通用脚本,需要跨系统兼容的情况。 - **`#!/sbin/sh`**:一般不常用,除非特定系统中有特殊的 `/sbin/sh` 且有相关的系统管理脚本需求。 ```bash # 示例脚本,使用 #!/bin/sh #!/bin/sh echo "This is a script using /bin/sh" ``` ```bash # 示例脚本,假设系统中有 /sbin/sh #!/sbin/sh echo "This is a script using /sbin/sh" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值