sh是Linux系统中Bourne shell的缩写,是最早出现的Unix shell之一,也是很多Linux发行版中默认兼容的shell实现,主要用于解析和执行shell命令或者shell脚本文件。它既可以作为交互式shell让用户直接输入命令并获取执行结果,也可以作为脚本解释器运行后缀为.sh的脚本文件。

sh的核心作用
sh的核心功能是作为命令解释器,承接用户或者脚本输入的指令,将其翻译为系统能够识别的操作并执行,最终返回执行结果。它的主要使用场景分为两类:
- 交互式使用:直接在终端输入sh命令,进入sh的交互式环境,输入命令后即时执行,和直接使用bash、zsh等shell的效果类似,只是语法特性遵循Bourne shell的规范。
- 脚本执行:作为脚本的解释器,当执行shell脚本时,系统会调用sh来解析脚本中的每一行命令,按顺序执行。
sh和bash的区别
很多用户会混淆sh和bash,实际上bash是Bourne Again shell的缩写,是sh的扩展版本,两者存在以下差异:
| 对比项 | sh | bash |
|---|---|---|
| 功能特性 | 仅支持基础的shell语法,不支持数组、[[ ]]条件判断、进程替换等高级特性 | 兼容sh的所有基础语法,同时支持更多扩展功能,功能更丰富 |
| 兼容性 | 几乎所有Unix/Linux系统都原生支持,兼容性极强 | 部分老旧系统可能未预装,需要手动安装 |
| 执行方式 | 严格遵循POSIX shell标准 | 默认兼容POSIX标准,也支持自身的扩展语法 |
sh的常见使用方法
1. 进入交互式sh环境
直接在终端输入sh即可进入交互式环境,输入exit可以退出:
# 进入sh交互式环境 sh # 执行简单命令 echo "hello sh" # 退出sh环境 exit
2. 执行shell脚本文件
如果有一个名为test.sh的脚本文件,可以通过以下两种方式用sh执行:
# 方式一:直接指定sh作为解释器执行脚本 sh test.sh # 方式二:给脚本添加执行权限后,在脚本第一行指定解释器为sh执行 # 脚本第一行内容:#!/bin/sh # 然后执行 ./test.sh
3. 执行字符串形式的命令
可以通过-c参数让sh直接执行字符串中的命令:
# 执行字符串中的多条命令,用分号分隔 sh -c "echo 'first command'; echo 'second command'"
使用sh的注意事项
- 如果脚本中用到了bash的扩展语法,不要用sh执行,否则可能出现语法错误,此时应该使用bash或者把脚本第一行的解释器改为
#!/bin/bash。 - 不同Linux发行版中,sh可能是指向bash的软链接,也可能是独立的dash等实现,执行前可以通过
ls -l /bin/sh查看sh的实际指向。 - 执行脚本时如果没有执行权限,直接用sh加脚本名的方式执行不需要额外添加权限,比先chmod再执行更便捷。
sh作为最基础的shell实现,虽然功能不如bash丰富,但胜在兼容性强,在编写需要跨系统运行的shell脚本时,优先使用sh兼容的语法可以避免很多兼容性问题。
shbashshell_scriptlinux_command修改时间:2026-07-13 17:18:24