sh 命令详解

1,632 阅读4分钟

sh 是 Unix 和 Linux 系统中标准的 Shell 解释器(Bourne Shell 或其兼容的 Shell,如 bash)。它用于执行 Shell 命令或脚本。以下是关于 sh 命令的详细说明,包括其用法、选项和常见场景。


1. sh 的基本用法

语法

sh [选项] [脚本文件] [参数]
  • [选项] :用于指定 sh 的行为。
  • [脚本文件] :要执行的 Shell 脚本文件。
  • [参数] :传递给脚本的参数。

示例

  1. 直接执行命令:
sh -c "echo Hello, World!"

输出:

Hello, World!
  1. 执行脚本文件:
sh script.sh
  1. 传递参数给脚本:
sh script.sh arg1 arg2

2. sh 的常用选项

选项说明
-c <命令>从字符串中读取命令并执行。
-n检查脚本语法,但不执行。
-x打印执行的每一行命令及其结果(用于调试)。
-e如果命令执行失败(返回非零状态码),立即退出脚本。
-u如果使用未定义的变量,立即退出脚本。
-v打印执行的每一行命令(不展开变量)。
-i以交互模式运行 Shell。
-l以登录 Shell 的方式运行。

选项详解

1. -c:从字符串中执行命令

sh -c "echo Hello, World!"
  • 适用于执行简单的命令或动态生成的命令。

2. -n:检查脚本语法

sh -n script.sh
  • 仅检查脚本的语法是否正确,不执行脚本。

3. -x:调试模式

sh -x script.sh
  • 打印每一行命令及其结果,方便调试脚本。

4. -e:错误退出

sh -e script.sh
  • 如果某条命令执行失败(返回非零状态码),立即退出脚本。

5. -u:未定义变量退出

sh -u script.sh
  • 如果脚本中使用了未定义的变量,立即退出脚本。

6. -v:打印执行的命令

sh -v script.sh
  • 打印每一行命令(不展开变量),方便查看脚本的执行过程。

7. -i:交互模式

sh -i
  • 以交互模式运行 Shell,通常用于调试或测试。

8. -l:登录 Shell

sh -l script.sh
  • 以登录 Shell 的方式运行脚本,会加载用户的配置文件(如 ~/.profile)。

3. sh 的常见使用场景

1. 执行脚本文件

sh script.sh
  • 直接执行一个 Shell 脚本文件。

2. 执行动态生成的命令

sh -c "echo Hello, World!"
  • 适用于需要动态生成命令的场景。

3. 调试脚本

sh -x script.sh
  • 使用 -x 选项可以逐行打印脚本的执行过程,方便调试。

4. 检查脚本语法

sh -n script.sh
  • 使用 -n 选项可以检查脚本的语法是否正确,而不实际执行脚本。

5. 加载配置文件

sh -l script.sh
  • 使用 -l 选项以登录 Shell 的方式运行脚本,会加载用户的配置文件。

4. sh 与 bash 的区别

  • sh:是 Bourne Shell 或其兼容的 Shell,通常是一个轻量级的 Shell。
  • bash:是 Bourne-Again Shell,是 sh 的增强版,支持更多功能(如数组、命令历史等)。

在大多数 Linux 系统中,sh 是 bash 的符号链接,但 bash 在作为 sh 运行时会禁用一些扩展功能。


5. sh 的退出状态码

  • 0:表示命令或脚本执行成功。

  • 非零值:表示命令或脚本执行失败。常见的非零状态码包括:

    • 1:一般错误。
    • 127:命令未找到。
    • 126:命令不可执行。

6. sh 的示例脚本

示例 1:简单脚本

# script.sh
#!/bin/sh
echo "Hello, World!"
sh script.sh

输出:

Hello, World!

示例 2:带参数的脚本

# script.sh
#!/bin/sh
echo "第一个参数: $1"
echo "第二个参数: $2"

执行:

sh script.sh arg1 arg2

输出:

第一个参数: arg1
第二个参数: arg2

示例 3:调试模式

# script.sh
#!/bin/sh
set -x  # 开启调试模式
echo "Hello, World!"
set +x  # 关闭调试模式

执行:

sh script.sh

输出:

+ echo Hello, World!
Hello, World!
+ set +x

7. 总结

  • sh 是一个标准的 Shell 解释器,用于执行 Shell 命令或脚本。
  • 通过选项可以控制 sh 的行为,例如调试、检查语法、错误处理等。
  • sh 与 bash 类似,但在某些系统中可能功能较少。
  • 适用于执行脚本、调试脚本、加载配置文件等场景。

如果你需要更强大的功能(如数组、命令历史等),建议使用 bash