test命令
长格式的例子:
test "$A" == "$B" && echo "Strings are equal" test “$A” -eq “$B” && echo "Integers are equal"
而-eq是两个数字是否相等的意思。
简写格式的例子:
[ "$A" == "$B" ] && echo "Strings are equal"
[ "$A" -eq "$B" ] && echo "Integers are equal
-v 用来检测一个变量是否被设置过值,若设置过则$?返回0,没设置过值返回1.
数值测试:
–gt //是否大于 -ge //是否大于等于 -eq //是否等于 -ne //是否不等于 -lt //是否小于 -le //是否小于等于
这些数值测试可以是整数或负数,甚至算数表达式来比较。但不支持小数点。
test有一个专用的命令中括号
左中括号[ 是一个命令,空格加右中括号是它的参数
具体如下:
# [ A ==A ]
# echo $?
# 0
也就是[ A ==A ] 等于 test "$A" == "$A".
左右中括号与后面的参数之间必须有空格.
字符串测试
字符串测试:注意: 此表达式一般用于[[ ]]中;扩展的正则表达式
== 是否等于 示例: [[ a == b ]]中, a == b 与中括号之间都有空格.
> ascii码是否大于ascii码
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配 即 左侧字符串是否包含右侧的,包含为真,不包含为假.
注意:用于字符串比较时的用到的操作数都应该使用引号
-z "STRING“ 字符串是否为空,空为真,不空为假,举例 # A=123 # [ -z $A ] # echo $? # 1 -z是当变量有值的时候为假,没有被赋值的时候为真. -n "STRING“ 字符串是否不空,不空为真,空为假,举例 # A=123 # [ -z $A ] # echo $? # 0 -n是当变量有值的时候为真,没有被赋值的时候为假.
存在性测试
-a FILE:同-e FILE:
文件存在性测试,存在为真,否则为假
# [ -e /etc/passwd ]等于test -e /etc/passwda 等于test -a /etc/passwda # echo $? # 0
存在性及类别测试
-b FILE://是否存在且为块设备文件 -c FILE://是否存在且为字符设备文件 -d FILE://是否存在且为目录文件 -f FILE://是否存在且为普通文件 -h FILE 或 -L FILE://存在且为符号链接文件 -p FILE://是否存在且为命名管道文件 -S FILE:是否存在且为套接字文件
权限测试
文件权限测试:
-r FILE://是否存在且可读 -w FILE: //是否存在且可写 -x FILE: //是否存在且可执行 [ -r /app/passwd -o -w /app/passwd ] //判断/app/passwd文件是否存在,并拥有读或写的权限. 不能写为 -rw [ -r /app/passwd -a -w /app/passwd ] //判断/app/passwd文件是否存在,并拥有读和写的权限. 不能写为 -rw
文件特殊权限测试:
-u FILE://是否存在且拥有suid权限 -g FILE://是否存在且拥有sgid权限 -k FILE://是否存在且拥有sticky权限
文件大小测试:
-s FILE: //是否存在且非空 -t fd: fd //文件描述符是否在某终端已经打开 -N FILE://文件自从上一次被读取之后是否被修改过 -O FILE://当前有效用户是否为文件属主 -G FILE://当前有效用户是否为文件属组
双目测试:
FILE1 -ef FILE2: //FILE1是否是FILE2的硬链接,主要看是否为同一个inode号。 FILE1 -nt FILE2: //FILE1是否新于FILE2(mtime) FILE1 -ot FILE2: //FILE1是否旧于FILE2
多条件判断.并且,或者,非..
第一种方式:
COMMAND1 && COMMAND2 并且 &&等于 -a COMMAND1 || COMMAND2 或者 ||等于 -o ! COMMAND 非
如:
[[ -r FILE ]] && [[ -w FILE ]] 等于 [ -r /app/passwd -a -w /app/passwd ] [[ -r FILE ]] || [[ -w FILE ]] 等于 [ -r /app/passwd -o -w /app/passwd ]
第二种方式:
条件1 -a 条件2 并且
条件1 -o 条件2 或者
! EXPRESSION
必须使用测试命令进行,即test或[]