linux下的sh命令详解
linux下的sh命令详解详细介绍
在 Linux 系统中,sh(Bourne Shell)是最早的 Unix shell 之一,由贝尔实验室的 Stephen Bourne 开发,目前大多数 Linux 发行版中的sh通常是指向其他 shell(如 bash、dash)的符号链接(symlink)。以下是关于sh命令的详细解析:
一、基本概念
- 本质:
sh是一个命令解释器,用于解析和执行用户输入的命令或脚本。 - 文件路径:通常位于
/bin/sh,可通过ls -l /bin/sh查看其实际指向(如bash、dash或ksh)。 - 特点:轻量、兼容性强,遵循 POSIX 标准,适合编写跨平台的 shell 脚本。
二、基本用法
1. 直接运行命令
在终端中输入sh后回车,进入交互式 shell 环境,输入命令即可执行:
bash
$sh$
sh$
2. 执行 shell 脚本
bash
选项 脚本文件路径
- 示例:执行当前目录下的
script.sh脚本:bashscript.sh
三、常用选项
sh支持通过选项修改行为,常用选项如下:
| 选项 | 描述 |
|---|---|
-a |
导出所有变量(等同于export),供子 shell 使用。 |
-c |
从命令行参数中读取并执行命令(后接待执行的命令字符串)。 |
-e |
若命令执行失败(返回非零状态码),立即退出脚本(严格模式)。 |
-n |
仅语法检查,不执行脚本(用于调试脚本语法错误)。 |
-x |
调试模式,执行时打印每条命令及其参数(等同于set -x)。 |
-s |
从标准输入(stdin)读取命令并执行(常用于管道或重定向)。 |
--help |
显示帮助信息(部分实现可能不支持,需查看具体 shell 文档)。 |
--version |
显示 shell 版本信息。 |
示例:
- 执行命令字符串:bash
- 调试脚本
script.sh:bashscript.sh
四、内置命令
sh包含以下常用内置命令(区别于外部命令,如ls、cp):
1. 基础命令
| 命令 | 描述 |
|---|---|
echo |
输出文本(支持-n不换行,-e解析转义字符如\n、\t)。 |
cd |
切换目录(如cd ~、cd ..)。 |
exit |
退出当前 shell(可带参数exit N表示退出状态码)。 |
pwd |
显示当前工作目录。 |
set |
设置 shell 选项或变量(如set -e开启严格模式,set --清除位置参数)。 |
unset |
删除变量或 shell 选项(如unset var删除变量,unset -f func删除函数)。 |
2. 变量与参数
- 变量赋值:
var=value(注意等号前后不能有空格)。 - 位置参数:
$0(脚本名)、$1~$9(第一个到第九个参数)、$@(所有参数列表)。 - 特殊变量:
$#:参数个数。$?:上一条命令的退出状态码(0 表示成功,非 0 表示失败)。$$:当前 shell 的进程 ID(PID)。
3. 流程控制
- 条件判断:使用
test命令或[ ]符号,语法如下:
sh条件命令
条件
命令
命令
常用条件操作符:
- 文件测试:
-f(文件存在且为普通文件)、-d(目录存在)、-x(文件可执行)。 - 数值比较:
-eq(等于)、-ne(不等于)、-gt(大于)。 - 字符串比较:
=(相等)、!=(不等)、-z(空字符串)。
- 文件测试:
- 循环结构:
for循环:shwhile循环:shcount
五、脚本编写基础
1. 脚本开头(Shebang)
建议在脚本第一行指定解释器,确保脚本可独立执行:
sh
2. 注释
以#开头的行是注释,如:
sh
3. 执行权限
给脚本添加执行权限后,可直接运行:
bash
+x script.sh./script.sh
六、
sh与其他 Shell 的区别
| 特性 | sh(POSIX 兼容) |
bash(GNU 增强版) |
dash(轻量实现) |
|---|---|---|---|
| 兼容性 | 严格遵循 POSIX 标准 | 支持更多扩展功能(如数组、函数、命令补全等) | 比 bash 更轻量,部分特性简化 |
| 默认指向 | 通常指向 bash 或 dash | 独立二进制文件 | 常见于 Debian/Ubuntu 等系统 |
| 语法扩展 | 不支持复杂特性 | 支持[[ ]]、(( ))、通配符扩展等 |
部分语法更严格(如不支持let命令) |
七、注意事项
- 跨平台性:使用
sh编写脚本时,应避免依赖 bash 特有的语法(如let、[[),确保符合 POSIX 标准。 - 性能:
dash比bash更快,适合作为系统脚本的解释器(如 Debian 的/bin/sh指向dash)。 - 调试:通过
-n(语法检查)和-x(跟踪执行)选项定位脚本错误。
总结
sh是 Linux 系统中最基础的 shell 之一,适合编写简洁、跨平台的脚本。尽管功能不如bash强大,但其轻量性和 POSIX 兼容性使其在系统脚本、初始化脚本中广泛应用。学习sh的核心是掌握 POSIX 标准语法,包括变量、条件判断、循环和内置命令,这也是理解其他 shell(如 bash、zsh)的基础。