sh 命令
基本介绍
sh 是 Unix/Linux 系统中的标准命令行解释器,也称为 Bourne Shell。它是最早的 Unix shell 之一,由 Stephen Bourne 于 1977 年编写。sh 提供了基本的命令执行环境和脚本编程能力,是许多系统脚本和配置文件的默认解释器。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
语法
sh [选项] [脚本文件]
启动选项
| -c <command> | 执行指定的命令后退出 |
| -i | 启动交互式 shell |
| -l | 作为登录 shell 启动 |
| -r | 启动受限 shell |
| -s | 从标准输入读取命令 |
| -v | 显示读取的输入行 |
| -x | 执行命令前显示命令及其参数 |
常用内置命令
文件和目录操作
| cd <dir> | 切换目录 |
| pwd | 显示当前目录 |
| mkdir <dir> | 创建目录 |
| rmdir <dir> | 删除空目录 |
| rm <file> | 删除文件或目录 |
| cp <src> <dst> | 复制文件 |
| mv <src> <dst> | 移动或重命名文件 |
变量和环境
| export <var>=<value> | 设置环境变量 |
| set | 显示所有变量和函数 |
| unset <var> | 删除变量 |
| env | 显示环境变量 |
| echo <text> | 输出文本 |
| read <var> | 读取用户输入 |
流程控制
| if … then … fi | 条件判断 |
| case … esac | 多条件分支 |
| for … do … done | 循环 |
| while … do … done | 条件循环 |
| until … do … done | 直到条件满足 |
| break | 跳出循环 |
| continue | 继续下一次循环 |
函数和脚本
| function <name> { … } | 定义函数 |
| <name>() { … } | 定义函数(简化形式) |
| return <n> | 从函数返回 |
| source <file> | 执行脚本文件 |
使用示例
1. 启动交互式 shell
sh
2. 执行单个命令
sh -c "echo 'Hello World'"
3. 执行脚本文件
sh script.sh
4. 作为登录 shell 启动
sh -l
5. 调试脚本(显示执行的命令)
sh -x script.sh
6. 读取并执行标准输入
echo "echo 'Hello'" | sh -s
7. 启动受限 shell
sh -r
8. 创建简单脚本
cat > test.sh << 'EOF'
#!/bin/sh
echo "Hello from sh script"
EOF
chmod +x test.sh
sh test.sh
9. 条件判断
sh -c "if [ -f /etc/passwd ]; then echo 'File exists'; fi"
10. 循环遍历
sh -c "for i in 1 2 3; do echo $i; done"
配置文件
系统级配置
- /etc/profile – 全局登录 shell 配置
- /etc/profile.d/ – 额外配置脚本目录
用户级配置
- ~/.profile – 用户登录 shell 配置
特殊变量
| $0 | 脚本名 |
| $1-$9 | 位置参数 |
| $* | 所有位置参数(作为单个字符串) |
| $@ | 所有位置参数(作为独立字符串) |
| $# | 参数数量 |
| $$ | 当前进程 ID |
| $? | 上一条命令的退出状态 |
与 bash 的区别
| 命令历史 | 不支持 | 支持 |
| 命令补全 | 不支持 | 支持 |
| 别名 | 不支持 | 支持 |
| 数组 | 不支持 | 支持 |
| 算术扩展 | 有限支持 | 完全支持 |
| 正则表达式 | 不支持 | 支持 |
| 兼容性 | POSIX 标准 | 兼容 sh |
实用技巧
1. 检查 sh 版本
sh –version
2. 使用 sh 执行 POSIX 兼容脚本
sh posix_script.sh
3. 脚本兼容性测试
sh -n script.sh # 语法检查
4. 后台执行脚本
sh script.sh &
5. 输出重定向
sh script.sh > output.log 2>&1
相关命令
| bash | Bourne-Again Shell(增强版) |
| csh | C Shell |
| tcsh | TENEX C Shell |
| zsh | Z Shell |
| ksh | Korn Shell |
注意事项
总结
sh 是 Unix/Linux 系统的标准 shell,遵循 POSIX 标准,提供了基本的命令执行和脚本编程能力。虽然功能相对简单,但它确保了脚本的最大兼容性和可移植性。




