shell

test

语法:test 表达式 或者 [ ]
test命令用于检查某个条件表达式是否成立,他可以进行数值、字符、文件三个方面的测试

  1. 可以使用[]一对方括号替代test命令,这是test命令的简写形式
  2. 使用方括号形式的简写时,需要注意方括号內的表达式前后必须要有空格,否则将会报错
  3. 如果省略表达式,返回false
  4. 如果表达式为单参数或者时将返回true
  5. 如果表达式的值为true返回0,如果表达式的值为false返回1
[root@bookcoins ~]# [-d /]
-bash: [-d: command not found
[root@bookcoins ~]# [ -d /]
-bash: [: missing `]'
[root@bookcoins ~]# [ -d / ]
[root@bookcoins ~]# test
[root@bookcoins ~]# echo $?
1
[root@bookcoins ~]# [  ]
[root@bookcoins ~]# echo $?
1
[root@bookcoins ~]# test -d
[root@bookcoins ~]# echo $?
0
[root@bookcoins ~]# [ -b ]
[root@bookcoins ~]# echo $?
0

主要用法如下:

* FILE type tests::             -[bcdfhLpSt]
* Access permission tests::     -[gkruwxOG]
* FILE characteristic tests::   -e -s -nt -ot -ef
* String tests::                -z -n = !=
* Numeric tests::               -eq -ne -lt -le -gt -ge
* Connectives for test::        ! -a -o

test file type

测试文件类型

-b FILE 如果文件存在且为块特殊文件则为真 
-c FILE 如果文件存在且为字符特殊文件则为真
-d FILE 如果文件存在且目录则为真 
-f FILE 如果文件存在且为普通文件则为真 
-h FILE 如果文件存在且为符号链接文件则为真 
-L FILE 如果文件存在且为符号链接文件则为真 
-p FILE 如果文件存在且为命名管道则为真 
-S FILE 如果文件存在且为套接字文件则为真 
-t FD   如果文件描述符是在终端打开的则为真 

test file permission

测试文件权限

-g FILE 如果文件存在且设置了SGID位则为真 
-k FILE 如果文件存在且设置了文件的粘着位则为真
-r FILE 如果文件存在且可读则为真 
-u FILE 如果文件存在且设置了SUID位则为真 
-w FILE 如果文件存在且可写则为真 
-x FILE 如果文件存在且可执行则为真 
-O FILE 如果文件存在且属于有效的用户则为真 
-G FILE 如果文件存在且属于有效的用户组则为真 

test file characteristic

测试文件特性

-e FILE 如果文件存在则为真 
-s FILE 如果文件存在且文件大小不为0则为真 
FILE1 -nt FILE2 如果文件1比文件2新(根据修改时间确定)或者文件1存在而文件2不存在则为真 
FILE1 -ot FILE2 如果文件1比文件2旧(根据修改时间确定)或者文件2存在而文件1不存在则为真 
FILE1 -ef FILE2 如果文件1和文件2属于相同的设备和inode节点则为真(即文件1和文件2是彼此的硬链接) 

test string

-z STRING 如果字符串的长度为0则为真 
-n STRING 如果字符串的长度不为0则为真 
STRING1 = STRING2 如果两个字符串相等则为真 
STRING1 != STRING2 如果两个字符串不相等则为真 

测试字符串,在shell中使用引用字符串测试时需要使用双引号,这个地方需要引起重视,可以从下面这个例子体会下:

[testd@bookcoins ~]$ echo $var1

[testd@bookcoins ~]$ test -n $var1
[testd@bookcoins ~]$ echo $?
0
[testd@bookcoins ~]$ test -n "$var1"
[testd@bookcoins ~]$ echo $?
1

test numberic

测试数值,参数必须是数字

ARG1 -eq ARG2 如果数值1等于数值2则为真 
ARG1 -ne ARG2 如果数值1不等于数值2则为真 
ARG1 -lt ARG2 如果数值1小于数值2则为真 
ARG1 -le ARG2 如果数值1小于等于数值2则为真 
ARG1 -gt ARG2 如果数值1大于数值2则为真 
ARG1 -ge ARG2 如果数值1大于等于数值2则为真 

connectives for test

连接测试,非与或

! EXPR 如果表达式的值为false则为真 
EXPR1 -a EXPR2 如果表达式1表达2的值都为true则为真 
EXPR1 -o EXPR2 如果表达式1或者表达式2的值为true则为真 
原文地址:https://www.cnblogs.com/spinxy/p/6054957.html