shell的测试表达式
shell的测试表达式
[ 表达式 ]
[空格 数字 空格 数字 空格]
test 表达式
1、字符串测试
-z 字串为空 [ -z 字符串 ]
!-z字串为非空 [ !-z 字符串 ]
[root@vh01 ~]# a=12
[root@vh01 ~]# [ -z $a ]
[root@vh01 ~]# echo $?
1
[root@vh01 ~]# [ ! -z $a ]
[root@vh01 ~]# echo $?
0
字符串比较
[ a == a ]
[ a != a ]
STRING1 == STRING2
STRING1 != STRING2
INTEGER1 -eq INTEGER2
INTEGER1 -ge INTEGER2
2、数字比较
[root@vh01 ~]# [ 3 -eq 3 ] 判断3是否等于3
-eq 等于 equal
-ne 不等于 not equal
-gt 大于 greater than
-ge 大于等于
-lt 小于 less than
-le 不于等于
[root@vh01 ~]# [ 3 -eq 3 ] && echo Y || echo N
[root@vh01 ~]# [ 3 -eq 4 ] && echo Y || echo N
命令的组合
A&&B 仅A成功,才执行B
A||B 仅A失败,才执行B
A;B 执行A,执行B
请输入一个数
你猜对了
遗憾!
#!/bin/bash
read -p "你确定要删除吗y/n?" sure
[ -z $sure ]&& exit
[ $sure = y ]&& rm -rf $1 || echo "请输入值"
用户数大于5报警发邮件的脚本
#!/bin/bash
NUM=$(who |wc -l)
[ $NUM -ge 5 ]&& mail -s 'error' root < /etc/passswd
[root@vh01 script]# echo $RANDOM 随机数
#!/bin/bash
num=$[RANDOM%10]
read -p '请输入一个数:' guess
[ $num -eq $guess ] && echo "你猜对了" || echo "遗憾!"
3、对文件和目录的测试
-e 文件或目录 判断是否存在
-d 文件或目录 判断是否存在且为目录
-f 文件或目录 判断是否存在且为文件
-r 文件或目录 判断是否存在且有读权限
-w 文件或目录 判断是否存在且有写权限
-x 文件或目录 判断是否存在且有执行权限
-s 文件或目录 判断是否存在且非空
[root@vh01 ~]# [ -f /etc/hosts ] && echo Y || echo N
[root@vh01 script]# vim mount.sh
#!/bin/bash
[ ! -d /mnt/iso ] && mkdir -p /mnt/iso
[ -e /ISO/rhel-server-6.7-x86_64-dvd.iso ]&& mount -o loop /ISO/rhel-server-6.7-x86_64-dvd.iso /mnt/iso
test 测试操作
[root@vh01 script]# test 3 -eq 3
[root@vh01 script]# echo $?
0
[root@vh01 script]# [ 3 -eq 3 ]
[root@vh01 script]# echo $?
0