首页 > 代码库 > shell编程之条件测试
shell编程之条件测试
条件测试
(一)概念:对特定的条件进行判断,以决定如何执行操作,当条件成立时,测试语句的返回值为0,否则为其他数值,意思就是如果 echo $? 的值是0,那么条件成立。条件测试的分类:文件测试、整数测试、字符串测试、逻辑测试。
测试方法:
方法1:test 条件表达式
方法2:[ 条件表达式 ]
(二)测试方法:
1.文件测试
格式1: [ 操作符 文件或目录 ]
格式2:test 操作符 文件或目录
常用的测试操作符
-d :测试是否为目录( Directory )
-e :测试目录或文件是否存在(Exist)
-f :测试是否为文件(File)
-r :测试当前用户是否可读(read)
-w:测试当前用户是否可写(write)
-x :测试当前用户是否可执行(excute)
1 [root@NEW1 ~]# [ -d /media/cdrom ] #注意这里中括号里需要和内容有空格 2 [root@NEW1 ~]# echo $? # 如果测试条件不成立,返回数字为非0 3 1 4 [root@NEW1 ~]# [ -d /root ] 5 [root@NEW1 ~]# echo $? 6 0 7 [root@NEW1 ~]# test -d /root && echo “yes” 8 “yes” 9 #最后一个语句的意思是如果前面条件测试成立,则输出yes,应用原理:&&是一个‘‘逻辑与‘‘运算符,前面为真,后面为真,整个语句才为真,当左面为真,就会继续触发逻辑与,继续判断右面才知道整个语句是否为真,所以才能输出 yes。
2、整数测试
格式1:[ 整数1 操作符 整数2 ]
格式2: test 整数1 操作符 整数2
常用的测试操作符
-eq : 等于 (Equal)
-ne : 不等于 (Not Equal)
-gt : 大于(Greater Than)
-lt : 小于 (Lesser Than)
-le : 小于或等于(Lesser or Equal)
-ge : 大于或等于(Greater or Equal)
1 [root@NEW1 ~]# who 2 root tty1 2016-11-04 09:59 (:0) 3 root pts/0 2016-11-04 09:59 (:0.0) 4 [root@NEW1 ~]# who | wc -l 5 2 6 [root@NEW1 ~]# [ $(who | wc -l) -gt 1 ] && echo ‘‘too many.‘‘ 7 too many.
3、字符串测试
格式1:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:[ -z 字符串 ]
常用的测试操作符
= : 字符串内容相同
!= : 字符串内容不同
-z : 字符串内容为空
1 [root@NEW1 ~]# [ aaa = aaa ] #判断两个字符串是否相等 2 [root@NEW1 ~]# echo $? 3 0 4 [root@NEW1 ~]# [ aaa != aaa ] 5 [root@NEW1 ~]# echo $? 6 1 7 [root@NEW1 ~]# [ -z ‘‘] #引号里没有字符串,为空 8 [root@NEW1 ~]# echo $? 9 0 10 [root@NEW1 ~]# [ -z ‘aaa‘ ] #引号里有字符串,不为空 11 [root@NEW1 ~]# echo $? 12 1
1 [root@NEW1 ~]# read -p "请输入用户名: " name #提示用户输入字符串,并赋值给name变量 2 请输入用户名: #用户直接回车,没有输入 3 [root@NEW1 ~]# [ -z $name ] #判断name变量是否为空 4 [root@NEW1 ~]# echo $? 5 0 #name为空,判断成立,显示0 6 [root@NEW1 ~]# read -p "请输入用户名: " name 7 请输入用户名: Mr.Mangood 8 [root@NEW1 ~]# [ -z $name ] 9 [root@NEW1 ~]# echo $? 10 1
1 [root@NEW1 ~]# echo $LANG #查看 LANG 语言变量 2 zh_CN.UTF-8 3 [root@NEW1 ~]# [ $LANG != "en.US" ] && echo "Not en.US" #如果LANG不为en.US,则输出提示,考察的也是$变量的用法 4 Not en.US
4、逻辑测试
格式:
[ 表达式 ] 操作符 [ 表达式2 ] ……
命令1 操作符 命令2 ……
常用的操作符 ( 注意:-a和-o放在[]里面用,&&和||放在[]外面用 )
-a 或 && 逻辑与
-o 或 || 逻辑或
! 逻辑否
1 [root@NEW1 ~]# [ -d /etc ] && [ -r /etc ] && echo "you can open it" 2 you can open it 3 [root@NEW1 ~]# [ -d /etc ] || [ -d /home ] && echo "OK" 4 OK
1 [root@NEW1 ~]# [ -d /etc ] || echo "测试或运算符当左边为真时,还是否执行右面" 2 [root@NEW1 ~]# echo $? #左侧为真,不执行右侧echo部分 3 0 #整体为真,因此输出0
1 [root@NEW1 ~]# [ 2 -eq 2 -a 3 -eq 4 ] && [ -d /etc ] 2 [root@NEW1 ~]# echo $? 3 1 4 5 [root@NEW1 ~]# [ 2 -eq 2 -o 3 -eq 4 ] && [ -d /etc ] 6 [root@NEW1 ~]# echo $? 7 0
shell编程之条件测试