步骤一:字符串测试
1)== 比较两个字符串是否相同
[root@svr5 ~]# [ $USER == "root" ] //测试
[root@svr5 ~]# echo $? //查看结果0为对,非0为错
2)!= 比较两个字符串是否不相同
[zengye@svr5 ~]$ [ $USER != "root" ]
3)一行执行多条命令的情况
A && B //仅当A命令执行成功,才执行B命令
A || B //仅当A命令执行失败,才执行B命令
A ; B //执行A命令后执行B命令,两者没有逻辑关系
4) -z 检查变量的值是否未设置(空值)
[root@svr5 ~]# var1="nb" ; var2=""
[root@svr5 ~]# [ -z "$var1" ] && echo "空值" || echo "非空值"
非空值
[root@svr5 ~]# [ -z $var2 ] && echo "空值" || echo "非空值"
空值 //变量var2已设置,但无任何值,视为空
[root@svr5 ~]# [ ! -z $var1 ] //测试var1是否为非空
步骤二:整数值比较
1)-eq 比较两个数是否相等
[root@svr5 ~]# X=20 //定义一个测试变量
[root@svr5 ~]# [ $X -eq 20 ] && echo "相等" || echo "不相等"
相等
[root@svr5 ~]# [ $X -eq 30 ] && echo "相等" || echo "不相等"
不相等
2)-ne 比较两个数是否不相等
[root@svr5 ~]# X=20 //定义一个测试变量
[root@svr5 ~]# [ $X -ne 20 ] && echo "不等于" || echo "等于"
等于
[root@svr5 ~]# [ $X -ne 30 ] && echo "不等于" || echo "等于"
不等于
3)-gt 比较前面的整数是否大于后面的整数
[root@svr5 ~]# X=20 //定义一个测试变量
[root@svr5 ~]# [ $X -gt 10 ] && echo "大于" || echo "否"
大于
[root@svr5 ~]# [ $X -gt 20 ] && echo "大于" || echo "否"
否
[root@svr5 ~]# [ $X -gt 30 ] && echo "大于" || echo "否"
否
4)-ge 比较前面的整数是否大于或等于后面的整数
[root@svr5 ~]# X=20 //定义一个测试变量
[root@svr5 ~]# [ $X -ge 10 ] && echo "大于或等于" || echo "否"
大于或等于
[root@svr5 ~]# [ $X -ge 20 ] && echo "大于或等于" || echo "否"
大于或等于
[root@svr5 ~]# [ $X -ge 30 ] && echo "大于或等于" || echo "否"
否
5)-lt 比较前面的整数是否小于后面的整数
[root@svr5 ~]# X=20 //定义一个测试变量
[root@svr5 ~]# [ $X -lt 10 ] && echo "小于" || echo "否"
否
[root@svr5 ~]# [ $X -lt 20 ] && echo "小于" || echo "否"
否
[root@svr5 ~]# [ $X -lt 30 ] && echo "小于" || echo "否"
小于
6)-le 比较前面的整数是否小于或等于后面的整数
[root@svr5 ~]# X=20 //定义一个测试变量
[root@svr5 ~]# [ $X -le 10 ] && echo "小于或等于" || echo "否"
否
[root@svr5 ~]# [ $X -le 20 ] && echo "小于或等于" || echo "否"
小于或等于
[root@svr5 ~]# [ $X -le 30 ] && echo "小于或等于" || echo "否"
小于或等于
7)提取当前登录的用户数,比较是否超过5
[root@svr5 ~]# who | wc -l //确认已登录的用户数
4
[root@svr5 ~]# N=$(who | wc -l) //赋值给变量N
[root@svr5 ~]# [ $N -gt 5 ] && echo "超过了" || echo "没超过"
没超过
上述赋值给变量N及与5比较的操作,可以简化为如下形式
[root@svr5 ~]# [ $(who | wc -l) -gt 5 ] && echo "超过了" || echo "没超过"
没超过
识别文件/目录的状态
1)-e 判断对象是否存在(不管是目录还是文件)
[root@svr5 ~]# [ -e "/usr/" ] && echo "存在" || echo "不存在"
存在
[root@svr5 ~]# [ -e "/etc/fstab" ] && echo "存在" || echo "不存在"
存在
[root@svr5 ~]# [ -e "/home/nooby" ] && echo "存在" || echo "不存在"
不存在
2)-d 判断对象是否为目录(存在且是目录)
[root@svr5 ~]# [ -d "/usr/" ] && echo "是目录" || echo "不是目录"
是目录
[root@svr5 ~]# [ -d "/etc/fstab" ] && echo "是目录" || echo "不是目录"
不是目录
[root@svr5 ~]# [ -d "/home/nooby" ] && echo "是目录" || echo "不是目录"
不是目录
3)-f 判断对象是否为文件(存在且是文件)
[root@svr5 ~]# [ -f "/usr/" ] && echo "是文件" || echo "不是文件"
不是文件
[root@svr5 ~]# [ -f "/etc/fstab" ] && echo "是文件" || echo "不是文件"
是文件
[root@svr5 ~]# [ -f "/home/nooby" ] && echo "是文件" || echo "不是文件"
不是文件
4)-r 判断对象是否可读
[root@svr5 ~]# cp /etc/hosts /tmp/test.txt //复制一个文件做测试
[root@svr5 ~]# chmod -r /tmp/test.txt //去掉所有的r权限
[root@svr5 ~]# [ -r "/tmp/test.txt" ] && echo "可读" || echo "不可读"
可读 //root测试结果仍然可读
5)-w 判断对象是否可写
[root@svr5 ~]# chmod -w /tmp/test.txt //去掉所有的w权限
[root@svr5 ~]# ls -l /tmp/test.txt //确认设置结果
---------- 1 root root 33139 12-11 10:43 /tmp/test.txt
[root@svr5 ~]# [ -w "/tmp/test.txt" ] && echo "可写" || echo "不可写"
可写
6)-x 判断对象是否具有可执行权限
[root@svr5 ~]# chmod 644 /tmp/test.txt //重设权限,无x
[root@svr5 ~]# ls -l /tmp/test.txt //确认设置结果
-rw-r--r-- 1 root root 33139 12-11 10:52 /tmp/test.txt
[root@svr5 ~]# [ -x "/tmp/test.txt" ] && echo "可执行" || echo "不可执行"
不可执行
[root@svr5 ~]# chmod +x /tmp/test.txt //添加x权限
[root@svr5 ~]# [ -x "/tmp/test.txt" ] && echo "可执行" || echo "不可执行"
可执行