在pdksh/bash中提供了test命令用来比较两个表达式(字符串/数字/文件)等。test命令的语法如下:
test expression
或者[ expression ]
注意中括号中的expression的前后是空格,忽略这一点将会引起语法错误。
test命令支持的比较有字符串比较,数字比较,文件运算符和逻辑运算符。下面我们就来学习这些比较的用法。
(1)字符串比较
比较字符串的运算符主要有:
x=y ——用来检查x与y是否相等
x!=y ——用来检查x和y是否不等
-n x ——用来检查字符串x的长度是否大于0,x不是空字符串时为真
-z x ——用来检查字符串x长度是否为0,x是空字符串时为真
如果两个字符串长度不同时,系统会先为较短的字符串后添加空格使得两者长度相同,而后完成比较。
(2)数字比较
x -eq y ——检查是否x和y相等
x -ne y ——检查是否x和y不等
x -gt y ——检查是否x大于y
x -lt y ——检查是否x小于y
x -ge y ——检查是否x大于等于y
x -le y ——检查是否x小于等于y
(3)针对文件的运算符
-e file ——文件file已经存在
-f file ——文件file是普通文件
-s file ——文件file大小不为0
-d file ——文件file是一个目录
-r file ——文件file对当前用户可以读取
-w file ——文件file对当前用户可以写入
-x file ——文件file对当前用户可以执行
-g file ——文件file的GID标志被设置
-u file ——文件file的UID标志被设置
-O file ——文件file是属于当前用户的
-G file ——文件file的组ID和当前用户相同
file1 -nt file2 ——文件file1比file2更新
file1 -ot file2 ——文件file1比file2更老
(4)逻辑运算符
! 逻辑取非运算符,对一个逻辑表达式操作
-a 逻辑与运算符,对两个逻辑表达式操作
-o 逻辑或运算符,对两个逻辑表达式操作
下面举个简单的例子:
#!/bin/bash
if [ -x file1 -a -x dir1 ]; then
echo file1 and dir1 are executable
else
echo at least one of file1 or dir1 are not executable
fi
其中file1是当前目录下的一个文件,dir1是当前目录下的一个子目录。该文件判断file1和dir1是否可执行。需要注意的是if和左中括号[中间有空格,[]里的表达式被空格包围,即[ expression ],否则会有语法错误。