shell编程-条件测试语句与if语句
test
[ ]
1.文件测试
文件测试是指根据给定的路径名称,判断是文件还是目录,判断是具有读写执行的权限,常用的选项如下:
-d: 测试是否为目录(Directory)或目录是否存在
-e: 测试目录或文件是否存在(Exist)
-f: 测试是否为文件(File)或文件是否存在
-r: 测试当前用户是否有权限读取(Read)
-w: 测试当前用户是否有写入权限(Write)
-x: 测试当前用户是否有权限执行(eXcute)
[root@bigdata111 shell]# ls /media/
[root@bigdata111 shell]# [ -d /media/cdrom ]
[root@bigdata111 shell]# echo $?
1
[root@bigdata111 shell]# [ -d /media/cdrom ]
[root@bigdata111 shell]# [ ! -d /media/cdrom ]
[root@bigdata111 shell]# echo $?
0
[root@bigdata111 shell]#
[root@bigdata111 shell]# [ ! -d /media/cdrom ] && mkdir -p /media/cdrom
[root@bigdata111 shell]# ls /media/
cdrom
[root@bigdata111 shell]# [ -d /media/cdrom ] && echo "File ok"
File ok
[root@bigdata111 shell]# [ ! -d /media/cdrom ] && echo "File ok"
[root@bigdata111 shell]#
2.多重条件判定
2.1逻辑测试
逻辑测试是指判断两个或多个条件之间的依赖关系,当系统取决与多个条件时,根据这些条件或其中的一个条件成立等情况的过程,
常用的逻辑测试
&&: 逻辑与,"并且而且"的意思 满足两个条件
||:逻辑或,"或则"的意思 满足两个条件中的一个
!: 逻辑否
[root@bigdata111 shell]# A=10
[root@bigdata111 shell]# [ $A -gt 1] && echo yes
bash: [: missing `]'
[root@bigdata111 shell]# [ $A -gt 1 ] && echo yes
yes
[root@bigdata111 shell]# [ $A -gt 1 ] || echo yes
[root@bigdata111 shell]# [ ! $A -gt 1 ] || echo yes
yes
[root@bigdata111 shell]#
2.2数值比较
数值的比较指的时根据给定的两个整数判断第一个数值与第二个数值的关系
-eq: 等于(Equal) Eq
-ne: 不等于(Not Equal)
-gt: 大于(Greater Then)
-lt:小于或等于(Lesser or Equal)
-ge: 大于或等于(Greater or Equal)
格式 [ 数值1 操作符 数值2 ]
判断当前用户数
[root@bigdata111 ~]# users=$(who | wc -l)
[root@bigdata111 ~]# echo $users
1
[root@bigdata111 ~]# [ $users -gt 1] && echo $users
bash: [: missing `]'
[root@bigdata111 ~]# [ $users -gt 1 ] && echo $users
[root@bigdata111 ~]# [ $users -eq 1 ] && echo $users
1
[root@bigdata111 ~]# [ $users -eq 5 ] && echo $users
[root@bigdata111 ~]# [ ! $users -eq 5 ] && echo $users
1
[root@bigdata111 ~]# [ $users -lt 5 ] && echo $users
1
[root@bigdata111 ~]# [ $users -lt 1 ] && echo $users
[root@bigdata111 ~]#
2.3字符串比较
字符串比较通常用来检查用户输入,系统环境是否满足条件,在提供交互式操作的shell脚本中也可以判断用户输入位置参数是否符合要求,字符串的常用操作如下:
= 字符串内容相同
!=字符串内容不行同
-z字符串内容为空
实例1:判断当前字符集
[root@bigdata111 shell]# sh -x lang.sh #脚本跟踪
+ echo en_US.UTF-8
en_US.UTF-8
+ '[' en_US.UTF-8 '!=' en.US ']'
+ echo en_US.UTF-8
en_US.UTF-8
+ '[' en_US.UTF-8 = en.US ']'
[root@bigdata111 shell]# sh lang.sh #输出
en_US.UTF-8
en_US.UTF-8
[root@bigdata111 shell]# echo $LANG
en_US.UTF-8
[root@bigdata111 shell]#
实例2:判断是否为空
[root@bigdata111 shell]# a=
[root@bigdata111 shell]# echo $a
[root@bigdata111 shell]# [ $a -z ] && echo "ok !"
bash: !": event not found
[root@bigdata111 shell]# [ $a -z ] && echo "ok"
ok
[root@bigdata111 shell]# [ ! $a -z ] && echo "ok"
[root@bigdata111 shell]# [ ! $a -z ] || echo "ok"
ok
[root@bigdata111 shell]#