ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
通常情况下,执行条件测试表达式会返回“真”或“假”,如果可以根据这些条件测试进行判断。 语法: 1)test 表达式 2)[ 测试表达式 ] 推荐的一种 3) [[ 测试表达式 ]] 4) (( 测试表达式 )) 注意: 1)[[ ]](双中括号)中可以使用通配符进行模式匹配 ,&& || > <操作符可以应用到[[ ]] 2) -a -o -gt -lt -eq -le等一般用在单中括号里 3)对于整数的关系运算,一样用(( )) 案例1: [root@fenfa day04]# test -f /tmp/yuki.txt || mkdir /tmp/yuki.txt [root@fenfa day04]# char=" " [root@fenfa day04]# test -z "$char" && echo 1 || echo 0 0 案例2: 【】的使用 [root@fenfa day04]# [ -f /tmp/yuki01 ] || touch /tmp/yuki01 [root@fenfa day04]# [ -f /tmp/yuki01 ] && echo True || echo False True && : 表达式前面为真,就执行后面的,如果为假,就不执行后面的 || : 表达式前面为假,就执行后面的,如果为真,就不执行后面的 ![](https://box.kancloud.cn/8395465f5b37f521082e3dd865a918a5_548x227.png) 二) 文件测试操作符 -f 文件 判断文件是否存在 -d目录 判断目录是否存在 -l 文件 判断文件是否为链接文件 -r 文件 判断文件是否可读 -w 文件 判断文件是否可写 -x文件 判断文件是否可执行 (执行脚本的用户,对这个文件,是否可读、写、执行) -s文件 判断文件大小是否为0 不为0为真 案例: [root@fenfa tmp]# touch yuki02.txt [root@fenfa tmp]# [ -f /tmp/yuki02.txt ] && echo True || echo False True 判断文件是否存在,存在则输出为true,不存在为false [root@fenfa tmp]# mkdir louis You have mail in /var/spool/mail/root [root@fenfa tmp]# [ -f louis ] && echo 1 || echo 0 0 (因为刚刚创建的是目录,这个-f判断是文件) [root@fenfa tmp]# [ -d /tmp/louis ] && echo 1 || echo 0 1 [root@fenfa tmp]# ll -l yuki02.txt -rw-r--r-- 1 root root 0 Jan 25 00:12 yuki02.txt (权限: rw r r) [root@fenfa tmp]# [ -r /tmp/yuki02.txt ] && echo 1 || echo 0 1 (root可以运行,可读) You have mail in /var/spool/mail/root [root@fenfa tmp]# [ -w /tmp/yuki02.txt ] && echo 1 || echo 0 1 (root用户运行,可写) [root@fenfa tmp]# su - www welcome 1000,you home is /home/www,please don't delete file [www@fenfa ~]$ [ -w /tmp/yuki02.txt ] && echo 1 || echo 0 0 (其他用户,www用户执行脚本,就没有写权限) [www@fenfa ~]$ exit logout [root@fenfa tmp]# [ -x /tmp/yuki02.txt ] && echo 1 || echo 0 0 (root用户没有执行权限) (说明: 运行脚本的用户,对这个文件是否有读写执行权限) 当表达式成立,也可以执行多个语句 [ 测试表达式 ] && { 语句1 语句2 语句3 ..... } 三)字符串操作符 功能: 1)比较2个字符串是否相同 2)测试字符串长度是否为0 -z “字符串” 字符串长度是否为空(0),空者为真 -n “字符串” 字符串长度是否不为空(不为0),非空者为真 “字符串1” =“字符串2” 字符串1是否等于字符串2,等于者为真 “字符串1” !=“字符串2” 字符串1是否不等于字符串2,不等于者为真 注意: 1)字符串或者字符串变量一定要加双引号 2) = != 的两端一定要个空格 [root@fenfa tmp]# var="/tmp/yuki01" You have mail in /var/spool/mail/root [root@fenfa tmp]# [ -z "$var" ] && echo 1 || echo 0 0 [root@fenfa tmp]# var1="" [root@fenfa tmp]# [ -z "$var1" ] && echo 1 || echo 0 1 (-z: 字符串空为真) [root@fenfa day04]# [ "`netstat -tunlp|grep 22|awk -F "[ :]+" 'NR==1{print $5}'`" = "22" ] && echo 1 || echo 0 1 三) 整数比较操作符 ![](https://box.kancloud.cn/d2de3cff2cba8dea1b136622b135b37d_1053x266.png) 注意:在单中括号里,使用-gt -ge -le -lt -eq -ne等 [root@fenfa tmp]# [ "`ps -ef|grep sshd|wc -l`" -gt 1 ] && echo 1 || echo 0 1 [root@fenfa day04]# [ 5 > 2 ] && echo 1 || echo 0 1 [root@fenfa day04]# [ 5 -gt 2 ] && echo 1 || echo 0 1 [root@fenfa day04]# [[ 5 > 2 ]] && echo 1 || echo 0 1 You have mail in /var/spool/mail/root [root@fenfa day04]# [[ 5 -gt 2 ]] && echo 1 || echo 0 1 (不建议在双中括号里,使用-gt,-le等) 四)逻辑操作符 ![](https://box.kancloud.cn/f2d36d3125d2b1eb4f80a45247982a25_1050x150.png) [root@fenfa day04]# [ -f /etc/hosts -a -f /etc/service ] && echo 1 || echo 0 0 You have mail in /var/spool/mail/root [root@fenfa day04]# [ -f /etc/hosts -a -f /etc/services ] && echo 1 || echo 0 1 [root@fenfa day04]# [[ -f /etc/hosts && -f /etc/services ]] && echo 1 || echo 0 1 &&: 只有左右两边都为1的时候,结果才为真 一般可以作为短路操作符 &&: 只有前面为真(1),后面的才会被执行 ||: 只有前面为假(0),后面才会被执行 [root@fenfa day04]# f1=/etc/rc.local You have mail in /var/spool/mail/root [root@fenfa day04]# f2=/etc/fstab [root@fenfa day04]# [ -f "$f1" -a -f "$f2" ] && echo 1 || echo 0 1 [root@fenfa day04]# [[ -f "$f1" && -f "$f2" ]] && echo 1 || echo 0 1 (在双中括号里,一定要用&&,||, 在单中括号里要用-a -o) [root@fenfa day04]# [ -z "$f1" -a -z "$f2" ] && echo 1 || echo 0 0 (-z: 字符串不空为假,就执行||后面的) ,