【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
CShell中的if语句可以使用正则表达式来进行模式匹配。在CShell中,可以使用grep命令来进行正则表达式的匹配。通过将需要匹配的字符串传递给grep命令,并在模式中使用正则表达式,可以判断字符串是否满足某个模式。 在CShell的if语句中使用正则表达式,可以通过使用反引号(``)或者$(...)来执行命令并获取输出结果,然后进行条件判断。例如: ``` if echo $string | grep "pattern" > /dev/null then # 匹配成功的处理逻辑 else # 匹配失败的处理逻辑 fi ``` 其中,$string是需要匹配的字符串,"pattern"是正则表达式的模式。如果$string符合正则表达式的模式,则grep命令返回匹配成功,并将结果输出到/dev/null(即丢弃),if语句中的条件判断为真,执行匹配成功的处理逻辑。如果$string不符合正则表达式的模式,则grep命令返回匹配失败,if语句中的条件判断为假,执行匹配失败的处理逻辑。 需要注意的是,在正则表达式中,某些字符具有特殊含义,比如点号(.)表示任意字符,需要使用转义符(\)来表示字面意义。同时,CShell中还提供了一些特殊的正则表达式字符类,比如[:alnum:]表示字母和数字,[:lower:]表示小写字母等等。可以根据具体的匹配需求选择合适的正则表达式模式进行匹配。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值