介绍
条件表达式可以是一元的,也可以是二元。一元表达式常用于检查文件状态、字符串运算、数字运算。
使用
检查文件状态参数
- -a 文件存在,则为真(TRUE)。
- -b 文件存在并且是块设备,则为真(TRUE)。
- -c 文件存在并且是字符设备,则为真(TRUE)。
- -d 文件存在并且是目录,则为真(TRUE)。
- -e 文件存在,则为真(TRUE)。跟-a的作用一致。
- -f 文件存在并且是常规文件,则为真(TRUE)。
- -g 文件存在并且有设置set-group-id位,则为真(TRUE)。
- -h 文件存在并且是符号链接,则为真(TRUE)。
- -k 文件存在并且设置了sticky,则为真(TRUE)。
- -p 文件存在并且是命名管道(FIFO),则为真(TRUE)。
- -r 文件存在并且权限是可以读的,则为真(TRUE)。
- -s 文件存在并且大小大于0,则为真(TRUE)。
- -t 文件存在并且文件描述符fd已打开并指向终端,则为真(TRUE)。
- -u 文件存在并且设置了set-user-id位,则为真(TRUE)。
- -w 文件存在并且权限是可以写的,则为真(TRUE)。
- -x 文件存在并且权限是可执行的,则为真(TRUE)。
- -G 文件存在并且拥有者是有效的组ID,则为真(TRUE)。
- -L 文件存在并且是符号链接,则为真(TRUE)。
- -N 文件存在并且自上次读取以来已被修改,则为真(TRUE)。
- -O 文件存在并且拥有者是有效的用户ID,则为真(TRUE)。
- -S 文件存在并且是套接字,则为真(TRUE)。
- file1 -ef file2 文件1和文件2引用相同的设备和inode编号,则为真(TRUE)。
- file1 -nt file2 文件1比文件2新(根据修改日期),或者文件1存在而文件2不存在,则为真(TRUE)。
- file1 -ot file2 文件1比文件2旧(根据修改日期),或者文件2存在而文件1不存在,则为真(TRUE)。
检查文件状态示例
下面是一个判断文件是否存在的shell脚本,若/usr/local/src/test.sh文件存在,就会将“文件已存在”打印到控制台,反之,则打印“文件不存在”。
value=/usr/local/src/test.sh
if [ -a "${value}" ];then
echo "文件已存在"
else
echo "文件不存在"
fi
执行过程如下:
字符串运算
- -v shell变量存在,则为真(TRUE)。
- -R shell变量存在并且名称被引用,则为真(TRUE)。
- -z 字符串的长度为0,则为真(TRUE)。
- -n 字符串的长度非0,则为真(TRUE)。
- string1 == string2 字符串相等,则为真(TRUE)。
- string1 = string2 字符串相等,则为真(TRUE)。单个等号字符的情况下,应该跟test命令一起使用,来确保POSIX一致性。
- string1 != string2 字符串不相等,则为真(TRUE)。
- string1 < string2 字符串按字典顺序排在string2之前,则为真(TRUE)。
- string1 > string2 字符串按字典顺序排在string2之后,则为真(TRUE)。
字符串运算示例
该脚本时判断两个字符串是否相等,若参数aaa和参数bbb的值相等,就会将“变量相等”打印到控制台,反之,则打印“变量不相等”。
aaa=age
bbb=ccc
if [ "$aaa" == "$bbb" ];then
echo "变量相等"
else
echo "变量不相等"
fi
执行过程如下:
数字运算
数字运算时,两边的数字必须是正整数或负整数。
注意,当和[[一起使用时,两边的数字被作为算术表达式计算。
- -eq 两边的数字相等,则为真(TRUE)。
- -ne 两边的数字不相等,则为真(TRUE)。
- -lt 左边数字小于右边数字,则为真(TRUE)。
- -le 左边数字小于或等于右边数字,则为真(TRUE)。
- -gt 左边数字大于右边数字,则为真(TRUE)。
- -ge 左边数字大于或等于右边数字,则为真(TRUE)。
数字运算示例
该脚本是判断参数a和参数b的值是否相等,若参数值相等,就会将“相等”打印到控制台,反之,则打印“不等于”。
a=3
b=5
if [ "$a" -eq "$b" ];then
echo "等于"
else
echo "不等于"
fi
执行过程如下: