条件测试:推荐使用格式2


格式1:   test<测试表达式>              man test查看相关帮助

格式2:   [<测试表达式>]

格式3:   [[<测试表达式>]]



说明:在[[]]中可以使用通配符进行模式匹配 && ||  >  < 等操作符可以应用于[[]]中,但不能应用于[]中


[root@localhost ~]# test -f file && echo 1 || echo 0

0


[root@localhost ~]# touch file

[root@localhost ~]# test -f file && echo 1 || echo 0

1


[root@localhost ~]# test ! -f file && echo 1 || echo 0

0


[root@localhost ~]# arg="martin"

[root@localhost ~]# test -z "$arg" && echo 1  || echo 0

0


[root@localhost tools]# [ -f file ]&& echo 1 || echo 0

0


[root@localhost tools]# [[ -f file && -d dir ]]&& echo 1 || echo 0

0


文件测试操作符

-f  file

-d  dirrctory

-s  size   文件存在且不为空则为真

-e  exist  可以是文件也可以是目录

-r  read

-w  write

-x  excute..

-L  link

f1 -nt f2    newer than 若文件f1比文件f2新则为真

f1  -ot f2   older than


[root@localhost tools]# mkdir martin

[root@localhost tools]# [ -f martin ]&& echo 1 || echo 0

0

[root@localhost tools]# [ -d martin ]&& echo 1 || echo 0 

1

[root@localhost tools]# [ -e martin ]&& echo 1 || echo 0 

1



常用字符串测试操作符

-z  "字符串"   若长度为0则为真, -z 可以理解为 zero

-n  "字符串"   若长度不为0则为真, -n 可以理解为 no zero

"串1"="串2"    若串1等于串2则为真,可使用== 代替=

"串1"!="串2"    若串1不于串2则为真,但不能使用 !==代替 !=



字符串或字符串变量比较都要加双引号再比较

字符串比较,比较符号两端最好有空格,多参考系统脚本

[root@localhost tools]# sed -n '30,31p' /etc/init.d/network 

# Check that networking is up.

[ "${NETWORKING}" = "no" ] && exit 6


[root@localhost tools]# martin="hello"

[root@localhost tools]# [ "${martin}" = "hello" ]&& echo 1 || echo 0

1

[root@localhost tools]# [ "${martin}" = "hello123" ]&& echo 1 || echo 0

0


[root@localhost tools]# [ -n "abc" ]&& echo 1 || echo 0       

1

[root@localhost tools]# [ -n "" ]&& echo 1 || echo 0   

0


shell 条件测试总结_第1张图片


[root@localhost tools]# [ 12 -eq 13 ]&&echo 1 || echo 0

0

[root@localhost tools]# [ 12 -lt 13 ]&&echo 1 || echo 0  

1

[root@localhost tools]# [ 12 -gt 13 ]&&echo 1 || echo 0 

0


[root@localhost tools]# [[ 12 > 13 ]]&&echo 1 || echo 0   

0

[root@localhost tools]# [[ 12 < 13 ]]&&echo 1 || echo 0 

1


逻辑操作符

在[]中使用的逻辑操作符       在[[]]中使用的逻辑操作符        说明

-a                               &&                          and

-o ||              or

!                                 !                          not   取反


[root@localhost tools]# [ -f "$f1" -a -f "$f2" ]&& echo 1 || echo 0

1


观察系统脚本 nfs

# Source networking configuration.

[ -f /etc/sysconfig/network ] &&  . /etc/sysconfig/network


[root@localhost scripts]# sed -n '87,90p' /etc/init.d/nfs

[ "$NFSD_MODULE" != "noload" -a -x /sbin/modprobe ] && {

/sbin/modprobe nfsd

[ -n "$RDMA_PORT" ] && /sbin/modprobe svcrdma

}