目标———识别各种状态、参数
脚本的智能化?
使Shell脚本获得识别能力?
为脚本语句执行提供必要的识别依据
文件或目录的读/写等状态
数值的大小
字符串是否匹配
多条件组合
条件测试命令
语法格式
test 选项 参数
[ 选项 参数 ]
命令help test 可以查询帮助
1.文件状态测试
[ 操作符 文件或目录 ]
操作符 含义
-e 判断对象是否存在(Exist),若存在则结果为真
-d 判断对象是否为目录(Directory),是则为真
-f 判断对象是否为一般文件(File),是则为真
-r 判断对象是否有可读(Read)权限,是则为真
-w 判断对象是否有可写(Write)权限,是则为真
-x 判断对象是否有可执行(eXecute)权限,是则为真
$ [ -d /etc/hosts ]
$ echo $?
1 #目录/etc/hosts不存在,测试不成功
$ [ -d /etc/vsftpd ]
$ echo $?
0 #目录/etc/vsftpd存在,测试成功
//等效简化
$ [ -d /etc/vsftpd ] && echo "YES"
YES
2.整数值比较
[ 整数值1 操作符 整数值2 ]
操作符 含义
-eq 等于(Equal)
-ne 不等于(Not Equal)
-ge 大于或等于(Greater or Equal)
-le 小于或等于(Lesser or Equal)
-gt 大于(Greater Than)
-lt 小于(Lesser Than)
识别登录的用户数,是否不超过5
$ who | wc -l
2
$ [ $(who | wc -l) -le 5 ] && echo "OK"
OK
3.字符串比较
[ 字符串1 操作符 字符串2 ]
操作符 含义
== 两个字符串相同
!= 两个字符串不相同
[ 操作符 字符串 ]
操作符 含义
-z 字符串的值为空
-n 字符串的值不为空(相当于! -z)
$ [$USER=="root"]&&echo "超级用户"
超级用户
$ [$PWD!="/"] && pwd
/root
$ [ -z "" ] && echo YES || echo NO
YES
$ [ -z " " ] && echo YES || echo NO
NO
4.多条件组合
[条件1] 操作符 [条件2]
操作符 含义
&& 给定条件必须都成立,整个测试结果才为真
|| 只要其中一个条件成立,则整个测试结果为真
当前用户为root,且位于/root目录下
$ [ $USER=="root"] && [$PWD=="/root"]
$ [$? -eq 0] && echo YES
YES
当/opt/tdir目录不存在时,创建该目录
$ [ -d "/opt/testdir" ] || mkdir -p /opt/testdir
$ ls -ld /opt/testdir/
drwxr-xr-x 2 root root 4096 12-03 18:13 /opt/testdir/