**
条件判断
**
test命令 与 []相同
test与[]只能判断3种
1.文件
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