在 CentOS 这类企业级 Linux 系统中,Shell 脚本(通常以 .sh 为后缀)是系统管理员和开发者的得力助手,它们将一系列命令组合在一起,实现任务的自动化,从简单的文件操作到复杂的应用部署,无不彰显其价值,理解如何在 CentOS 中正确、高效地运行这些 .sh 命令,是掌握 Linux 系统管理的基石。

理解 Shebang:脚本的第一行指令
在深入探讨执行方法之前,必须先了解脚本文件开头的 ,这被称为 “Shebang” 或 “Hashbang”,这一行指定了应该用哪个解释器来执行脚本。
#!/bin/bash:这是一个非常常见的 Shebang,它告诉系统使用 Bash(Bourne Again Shell)来执行脚本,Bash 是大多数现代 Linux 发行版(包括 CentOS)的默认 Shell,功能强大,兼容性好。#!/bin/sh:这指定使用更基础的sh(Bourne Shell),在 CentOS 中,/bin/sh通常是/bin/bash的一个符号链接,但 Bash 在以sh名义被调用时,会以更严格的 POSIX 标准模式运行,不会包含 Bash 特有的扩展功能。
Shebang 的存在使得脚本可以被直接执行,而无需用户每次都手动指定解释器。
运行 .sh 脚本的核心方法
在 CentOS 中,有几种主流的方法可以运行 Shell 脚本,每种方法都有其特定的应用场景和细微差别。
使用 sh 命令显式执行
这是最直接的方法之一,通过调用 sh 解释器来运行脚本。
sh your_script.sh
工作原理:此命令会启动一个新的 sh 进程,并将 your_script.sh 的内容作为输入传递给它执行,一个关键点是,这种方式会忽略脚本文件内部的 Shebang 行,即使你的脚本开头写的是 #!/bin/bash,使用 sh your_script.sh 也会强制它以 sh 的兼容模式运行,如果你的脚本中使用了 Bash 特有的语法(如数组、某些扩展功能),就可能会报错。
适用场景:
- 当你确信脚本兼容 POSIX 标准,不包含任何 Bash 特有功能时。
- 快速测试一个简单的脚本,不想关心其权限设置。
- 在一个非 Bash 环境中(尽管在 CentOS 上很少见)强制使用
sh。
使用 bash 命令显式执行
与方法一类似,但明确指定使用 bash 解释器。
bash your_script.sh
工作原理:这会启动一个新的 bash 进程来执行脚本,同样,这种方式也会忽略脚本内的 Shebang 行,强制使用 Bash,这可以确保脚本的所有 Bash 特性都能被正确解析。

适用场景:
- 当你的脚本明确依赖 Bash 的高级功能时,这是最稳妥的显式调用方式。
- 当系统默认的
sh不是 Bash,而你又需要使用 Bash 特性时(在 CentOS 上不常见,但在其他 Unix 系统上可能遇到)。
赋予执行权限后直接运行
这是最标准、最推荐的脚本执行方式,它分为两个步骤:
赋予执行权限:使用
chmod命令给脚本文件添加可执行权限。chmod +x your_script.sh
+x表示添加执行权限。直接运行脚本:在命令行中输入脚本的路径来执行它。
./your_script.sh
工作原理:
chmod +x修改了文件的权限位,使其成为一个可执行程序。- 当你输入
./your_script.sh时,系统会识别出它是一个可执行文件,这里的 非常重要,它代表“当前目录”,出于安全考虑,Linux 默认不会在当前目录()中寻找可执行文件,你必须明确指定路径,你也可以使用脚本的绝对路径,如/home/user/scripts/your_script.sh。 - 系统会读取脚本第一行的 Shebang,并调用指定的解释器(如
/bin/bash)来执行它,这种方式尊重脚本作者的意图,是最为规范的做法。
三种执行方式的对比
为了更清晰地理解它们的区别,下表小编总结了这三种方法的核心差异:
| 执行方式 | 使用的 Shell | Shebang 有效性 | 适用场景 |
|---|---|---|---|
sh script.sh | sh (POSIX 模式) | 无效(被忽略) | 执行兼容 POSIX 的简单脚本,快速测试 |
bash script.sh | bash | 无效(被忽略) | 执行依赖 Bash 特有功能的脚本 |
./script.sh | 由 Shebang 决定 | 有效(被遵守) | 标准、推荐的方式,用于生产环境和正式脚本 |
最佳实践与常见问题
在实际操作中,遵循一些最佳实践可以避免很多麻烦。

- 路径问题:始终使用
./script.sh或完整路径来执行脚本,而不是仅仅输入script.sh,除非脚本的所在目录已经添加到了系统的PATH环境变量中。 - 权限问题:如果执行
./script.sh时遇到-bash: ./your_script.sh: Permission denied错误,几乎可以肯定是忘记执行chmod +x your_script.sh。 - 文件编码问题:如果脚本是在 Windows 系统中创建的,其行尾结束符可能是
CRLF(rn),而 Linux 系统期望的是LF(n),这可能导致 Shebang 行无法被正确识别,从而引发command not found等奇怪的错误,可以使用dos2unix工具来转换文件格式:dos2unix your_script.sh
- 环境变量继承:通过
sh,bash, 方式执行的脚本,都会在一个新的子 Shell 进程中运行,脚本中对环境变量的修改(如export VAR=value)在脚本结束后不会影响到父 Shell,如果希望脚本中的环境变量在当前 Shell 中生效,需要使用source命令(或其简写 ):source your_script.sh # 或者 . your_script.sh
这会在当前 Shell 中逐条执行脚本内的命令。
相关问答 (FAQs)
sh myscript.sh 和 ./myscript.sh 看起来都运行了脚本,它们之间有什么本质区别?
解答:是的,它们都能运行脚本,但工作方式有本质区别。sh myscript.sh 是显式地调用 sh 解释器来执行脚本内容,它会完全忽略脚本文件第一行的 Shebang(如 #!/bin/bash),强制以 sh 的兼容模式运行,而 ./myscript.sh 是将脚本文件作为一个独立的可执行程序来运行,系统会首先检查该文件是否有执行权限,然后读取其 Shebang 行,并调用 Shebang 指定的解释器(如 /bin/bash)来执行。./myscript.sh 更为规范,它尊重脚本作者设定的运行环境,是生产环境中推荐的做法。
我尝试运行一个脚本,系统提示 -bash: ./myscript.sh: Permission denied,这是什么意思,我该如何解决?
解答:这个错误信息非常明确,表示“权限被拒绝”,它意味着你当前的用户没有执行 myscript.sh 这个文件的权限,在 Linux 中,文件有读、写、执行三种权限,一个新创建的脚本文件默认通常只有读和写权限,没有执行权限,要解决这个问题,你需要使用 chmod(change mode)命令为文件添加执行权限,执行以下命令即可:chmod +x myscript.sh
这个命令会给当前用户、用户组和其他用户都添加执行该文件的权限,添加完毕后,你就可以再次尝试使用 ./myscript.sh 来成功运行它了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复