shell条件测试

113 阅读1分钟

条件操作概述

测试操作

语法格式

  • test 表达式
  • [ 表达式 ] 注意表达识的两边要留有一个空格注意表达识的两边要留有一个空格

常见的测试操作

字符串比较

  • [ 操作符 字符串 ] | 操作符号 |含义 | | --- | --- | | -z | 字符串的值为空| | -n | 字符串的值不为空|
[root~] # a=''
[root~]# [ -z $a ] && echo yes || echo no 
  • [ 字符串1 操作符 字符串2 ]
操作符含义
==两个字符串相同
!=两个字符串不相同
[root~]# [ $USER=='root' ] && echo "超级用户"

整数值比较

  • [ 整数值1 操作符 整数值2 ]
操作符含义
-eq等于(equal)
-ne不等于(not equal)
-ge大于或者等于
-le小于或等于
-gt大于
-lt小于
检查已经登陆的用户数,是否不超过5个
[root~]# [ `who | wc -l` -le 5] && echo "用户不超过5个"

文件状态测试

  • [ 操作符 文件或目录 ]
操作符含义
-e判断对象是否存在,若存在则结果为真
-d判断对象是否为目录,若是则结果为真
-f判断对象是否为文件,若是则结果为真
-r判断对象是否有可读权限,若是则结果为真
-w判断对象是否有可写权限,若是则结果为真
-x判断对象是否有可执行权限,若是则结果为真
[root~] # [ -d /etc/vsftpd ] && echo "yes"

组合多种条件

逻辑分隔操作

  • 用法: 命令1 操作符 命令2
操作符含义
&&给定条件必须都成立,整个测试结果才为真
||只要其中一个条件成立,整个测试结果为真
逻辑运算
&&之前指令成功才会执行之后指令
||之前指令失败才会执行之后指令
# 当/opt/testdir目录不存在时,创建该目录
[root~] # [ $USER =='root' ] \&\& [ $PWD=='/root' ]
[root~] # [ $? -eq 0 ] && echo yes