自学内容网 自学内容网

【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)!