大数据兼云计算(王明龙)讲师-LINUX-DAY18-SHELL-条件判断

**

条件判断

**


test命令 与 []相同

test与[]只能判断31.文件
2.数字
3.字符串

# man test

-f 判断输入的内容是否是文件
# [ -f /文件名 ] ; echo $?                     //回显0则是,不为0的数字为否

举例:
# test -f /root/wml.txt;echo $? 
# [ -f /root/wml.txt ];echo $?

-d 判断输入的内容是否是目录
# [ -d /目录名 ] ; echo $?                    //回显0则是,不为0的数字为否

-L 判断输入的内容是否是链接文件
# [ -L /文件名 ] ; echo $?                     //回显0则是,不为0的数字为否

-c 判断输入的内容是否是字符设备文件
# [ -c /文件名 ] ; echo $?                    //回显0则是,不为0的数字为否

-b 判断输入的内容是否是块设备文件
# [ -b /文件名 ] ; echo $?                    //回显0则是,不为0的数字为否

-r 判断输入的内容是否是可读文件
# [ -r /文件名 ] ; echo $?                     //回显0则是,不为0的数字为否

-w 判断输入的内容是否是可写文件
# [ -w /文件名 ] ; echo $?                   //回显0则是,不为0的数字为

-x 判断输入的内容是否是可执行文件
# [ -x /脚本名 ] ; echo $?                    //回显0则是,不为0的数字为否


test 与 [] 的判断符号

# man test        字符的比较运算符(只支持数字),传统的比较运算符(支持字符与数字)




字符比较运算符练习:
[root@localhost ~]# test 0 -eq 0 ; echo $?
0
[root@localhost ~]# test 0 -eq 1 ; echo $? 
1

但不能这么支比较,因为语法是int
[root@localhost ~]# test wml.txt -eq wml.txt ; echo $? 
-bash: test: wml.txt: 期待整数表达式
2

定义变量,进行匹配
[root@localhost ~]# a=1
[root@localhost ~]# b=1
[root@localhost ~]# test $a -eq $b;echo $?  

注意:传统比较运算符,符号前后不要加空格,什么都能匹配
test 1>2 ; echo $?
test 1>=3 ; echo $?

传统比较运算符练习
----------------------------------------------------------------
[root@node2 ~]# test b == b ; echo $?    
0
[root@node2 ~]# test b == b ; echo $?  
0
[root@node2 ~]# test 1 == 2; echo $?   
1
[root@node2 ~]# test 1 == 1; echo $? 
0


注意:比较运算符之间要加空格,如果不加代表一个字符串,加了代表符合比较逻辑
--------------------------------------------------------------------------------------------------------------------------------------------------------------
[ ] 加空格
[root@node1 ~]# [ a == b ];echo $?         #a和b进行比较时,==运算符前后都有空格,符合比较逻辑,所以正常输出
1

[ ] 未加空格
[root@node1 ~]# [ a==b ];echo $?           #a和b进行比较时,==运算符前后无空格,不符合比较逻辑,所以未正常输出
0

test 未加空格
[root@node1 ~]# test a=b;echo $?            #test用=号进行判断时,a和b之间无空格,test直接当作a=b是一个字符串
0
[root@node1 ~]# test a==b;echo $?
0
[root@node1 ~]# test a=1;echo $?  
0

test 加空格
[root@node1 ~]# test a = 1;echo $?        #test用=号进行判断时,a和b之间都有空格,符合test比较逻辑,所以正常输出
1
[root@node1 ~]# test a = b;echo $? 
1
[root@node1 ~]# test a == b;echo $?
1
--------------------------------------------------------------------------------------------------------------------------------------------------------------


传统运算符在命令下不好用,原因与系统符号相冲突,比如>它就是重定向
[root@localhost ~]# [ $a < $b ]  
-bash: 456: 没有那个文件或目录
[root@localhost ~]# [ $a < 1 ] 
-bash: 1: 没有那个文件或目录
[root@localhost ~]# test $a < $b ;echo $? 
-bash: 456: 没有那个文件或目录
1
[root@localhost ~]# [ 1 < 1 ]             
-bash: 1: 没有那个文件或目录
[root@localhost ~]# test
test           testlibraw     testsaslauthd  
testgdbm       test_ppa       
[root@localhost ~]# test 1 < 2;echo $?
-bash: 2: 没有那个文件或目录
1

猜你喜欢

转载自blog.csdn.net/wangminglong1989/article/details/81509295