条件测试是 shell 编程中非常重要的一个概念,它允许我们根据某个条件是否满足,来选择执行相应的任务。
shell 中的条件测试语法如下:
[ 条件表达式 ]
如果条件表达式为真,则返回 0,表示测试成功;如果条件表达式为假,则返回非 0 值,表示测试失败。
条件表达式可以是任何可以表示真值或假值的表达式,包括字符串比较、算术比较、文件测试、逻辑运算等。
字符串比较可以使用以下操作符:
操作符 | 含义 |
---|---|
-z str | str 为空时,返回真 |
-n str | str 不为空时,返回真 |
str1 = str2 | str1 等于 str2 时,返回真 |
str1 != str2 | str1 不等于 str2 时,返回真 |
算术比较可以使用以下操作符:
操作符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-ge | 大于或等于 |
-lt | 小于 |
-le | 小于或等于 |
文件测试可以使用以下操作符:
操作符 | 含义 |
---|---|
-f file | file 存在且是一个普通文件时,返回真 |
-d file | file 存在且是一个目录时,返回真 |
-e file | file 存在时,返回真 |
-s file | file 存在且大小大于 0 时,返回真 |
-r file | file 存在且可读时,返回真 |
-w file | file 存在且可写时,返回真 |
-x file | file 存在且可执行时,返回真 |
逻辑运算可以使用以下操作符:
操作符 | 含义 |
---|---|
&& | 逻辑与,都为真时,返回真 |
\ | \ |
! | 逻辑非 |
以下是一些使用条件测试的实验示例:
判断变量是否为空
#!/bin/bash
name="Josh"
if [ -z "$name" ]; then
echo "变量为空"
else
echo "变量不为空"
fi
运行该脚本,将输出以下结果:
变量不为空
判断文件是否存在
#!/bin/bash
file="/etc/passwd"
if [ -e "$file" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
运行该脚本,将输出以下结果:
文件存在
判断字符串是否相等
#!/bin/bash
str1="hello"
str2="world"
if [ "$str1" == "$str2" ]; then
echo "字符串相等"
else
echo "字符串不相等"
fi
运行该脚本,将输出以下结果:
字符串不相等
条件测试是 shell 编程中非常重要的一个概念,它可以帮助我们实现复杂的逻辑判断。