Shell [ ](测试命令)中用于判断文件、字符串或数字状态的各种选项吧?我帮你整理一下常用的 - 开头的判断选项及其作用:
一、字符串测试相关(常见 - 选项)
| 选项 | 说明 | 示例 |
|---|---|---|
-z | 字符串长度为0(空字符串) | [ -z "$str" ] |
-n | 字符串长度非0(非空字符串) | [ -n "$str" ] |
= | 字符串相等 | [ "$a" = "$b" ] |
!= | 字符串不等 | [ "$a" != "$b" ] |
二、文件测试相关(常见 - 选项)
| 选项 | 说明 | 示例 |
|---|---|---|
-f | 是否是普通文件 | [ -f filename ] |
-d | 是否是目录 | [ -d dirname ] |
-e | 文件(或目录)是否存在 | [ -e filename ] |
-r | 文件是否可读 | [ -r filename ] |
-w | 文件是否可写 | [ -w filename ] |
-x | 文件是否可执行 | [ -x filename ] |
-s | 文件是否非空(大小 > 0) | [ -s filename ] |
-L | 是否为符号链接 | [ -L filename ] |
-S | 是否为套接字(socket) | [ -S filename ] |
-p | 是否为命名管道(FIFO) | [ -p filename ] |
三、整数比较相关(不带 - 的比较符)
整数比较用以下符号(需要放在 [ ] 中):
| 操作符 | 说明 | 示例 |
|---|---|---|
-eq | 等于 | [ "$a" -eq "$b" ] |
-ne | 不等于 | [ "$a" -ne "$b" ] |
-gt | 大于 | [ "$a" -gt "$b" ] |
-ge | 大于等于 | [ "$a" -ge "$b" ] |
-lt | 小于 | [ "$a" -lt "$b" ] |
-le | 小于等于 | [ "$a" -le "$b" ] |
四、示例总结
# 判断文件是否存在且是普通文件
if [ -f "myfile.txt" ]; then
echo "是普通文件"
fi
# 判断目录是否存在
if [ -d "/tmp" ]; then
echo "目录存在"
fi
# 判断字符串是否为空
if [ -z "$var" ]; then
echo "变量为空"
fi
# 判断两个数字是否相等
if [ "$a" -eq "$b" ]; then
echo "数字相等"
fi
编写脚本时if使用注意事项:
1. 空格强制要求:`[` 和 `]` 前后必须有空格
- ✅ 正确:`[ -f file ]`
- ❌ 错误:`[-f file]`
2. 变量必须加引号:防止空变量或含空格变量导致语法错误
```bash
[ "$var" = "value" ] # ✅
[ $var = "value" ] # ❌($var 为空时报错)
```
3. 返回值规则:
- 条件为真 → 返回 `0`
- 条件为假 → 返回 非`0`(通常是 `1`)
4. 操作符专用:
- 数值比较:`-eq`, `-ne`, `-lt`(不能用 `==`, `>`)
- 字符串比较:`=`, `!=`, `-z`
---
与 C 语言的核心区别:
| 特性 | Shell | | C 语言 |
| 真值返回值 | `0` 表示真 | `0` 表示假 |
| 假值返回值 | 非`0` 表示假(通常是 `1`) | 非`0` 表示真 |
| 变量引用 | 必须加 `$` 符号 | 直接使用变量名 |
| 语法格式 | 严格依赖空格 | 无空格要求 |
示例:
- Shell 真值判断:`if [ 1 -eq 1 ]; then` → 返回 `0`(真)
- C 语言真值判断:`if (1 == 1)` → 返回 `1`(真)
2251

被折叠的 条评论
为什么被折叠?



