【Shell】if表达式
1. 文件测试条件
Shell 提供了丰富的文件测试选项来检测文件或目录的存在、类型及权限等。以下是所有常用的文件测试选项:
测试选项 | 解释 |
---|---|
-e | 检查文件或目录是否存在 |
-f | 检查是否为普通文件(非目录或设备文件) |
-d | 检查是否为目录 |
-r | 检查文件是否可读 |
-w | 检查文件是否可写 |
-x | 检查文件是否可执行 |
-L | 检查文件是否为符号链接 |
-h | 检查文件是否为符号链接(与 -L 相同) |
-p | 检查文件是否为命名管道(FIFO) |
-S | 检查文件是否为套接字文件 |
-b | 检查文件是否为块设备文件 |
-c | 检查文件是否为字符设备文件 |
-s | 检查文件是否非空 |
-t | 检查文件描述符是否关联到终端(通常用于测试 stdin ) |
-g | 检查文件是否设置了 SGID(Set Group ID on execution)位 |
-u | 检查文件是否设置了 SUID(Set User ID on execution)位 |
-k | 检查文件是否设置了粘滞位(Sticky Bit) |
-O | 检查文件是否由当前用户拥有 |
-G | 检查文件是否由当前用户所在的组拥有 |
-N | 检查文件是否自上次访问后被修改 |
示例:
if [ -L "/path/to/symlink" ]; then
echo "这是一个符号链接"
fi
2. 数值比较条件
在 shell 中,数值比较使用以下运算符:
比较运算符 | 解释 |
---|---|
-eq | 等于(equal) |
-ne | 不等于(not equal) |
-gt | 大于(greater than) |
-ge | 大于或等于(greater or equal) |
-lt | 小于(less than) |
-le | 小于或等于(less or equal) |
示例:
if [ "$a" -lt 100 ]; then
echo "a 小于 100"
fi
3. 字符串比较条件
用于字符串的比较选项如下:
比较运算符 | 解释 |
---|---|
= | 字符串相等(注意:有些 shell 需要使用 == ) |
!= | 字符串不相等 |
-z | 字符串长度为零 |
-n | 字符串长度非零 |
示例:
if [ "$str1" = "$str2" ]; then
echo "str1 和 str2 相等"
fi
if [ -z "$str1" ]; then
echo "str1 是空的"
fi
4. 逻辑运算符
用于将多个条件组合在一起的运算符:
运算符 | 解释 |
---|---|
&& | 逻辑与(两个条件都为真) |
` |
示例:
if [ "$a" -lt 10 ] && [ "$b" -gt 5 ]; then
echo "a 小于 10 且 b 大于 5"
fi
5. 条件组合(复合条件)
Shell 支持多个条件组合在一起进行判断,例如使用 [[ ... ]]
可以简化条件的书写并避免一些常见的错误。下面是复合条件的一些特殊符号和逻辑运算符:
运算符 | 解释 |
---|---|
[[ ... ]] | 扩展的测试命令,支持复杂的逻辑条件和模式匹配。通常比 [...] 更加安全和强大。 |
! | 取反操作符,用于否定条件 |
示例:
if [[ "$a" -lt 10 && "$b" -gt 5 ]]; then
echo "a 小于 10 且 b 大于 5"
fi
6. 算术条件
(( ... ))
用于进行算术运算,常用于数值计算和逻辑判断。
运算符 | 解释 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取模运算 |
== | 判断相等(数值比较) |
!= | 判断不等(数值比较) |
< | 小于(数值比较) |
> | 大于(数值比较) |
<= | 小于或等于(数值比较) |
>= | 大于或等于(数值比较) |
示例:
if (( a + b == 10 )); then
echo "a 和 b 之和为 10"
fi
7. 高级字符串模式匹配
在 [[ ... ]]
语法中可以使用字符串模式匹配,例如使用通配符或正则表达式。
运算符 | 解释 |
---|---|
== | 字符串相等,支持通配符 |
=~ | 正则表达式匹配(Bash 特性) |
示例:
if [[ "$string" == "hello*" ]]; then
echo "字符串以 hello 开头"
fi
if [[ "$string" =~ ^[0-9]+$ ]]; then
echo "字符串全是数字"
fi
8. 位运算符
Shell 还支持位运算符(主要在算术条件中使用):
运算符 | 解释 |
---|---|
& | 位与(AND) |
` | ` |
^ | 位异或(XOR) |
<< | 左移 |
>> | 右移 |
示例:
if (( a & 1 )); then
echo "a 是奇数"
fi
9. 整数比较运算符(用于 (( ... ))
和 let
命令)
除了上述的 -eq
、-lt
等运算符外,在 (( ... ))
和 let
命令中可以使用经典的 C 风格比较运算符,如 ==
、!=
、<
、>
等。
示例:
if (( a == b )); then
echo "a 和 b 相等"
fi
10. 结合 case
语句
除了 if
语句,shell 脚本中还可以使用 case
语句进行模式匹配,它在处理多种情况时非常有用。
示例:
case "$var" in
start)
echo "启动"
;;
stop)
echo "停止"
;;
*)
echo "未知命令"
;;
esac
原文地址:https://blog.csdn.net/W__winter/article/details/142623323
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!