表达式的类别:

  • 文件表达式

  • 数值表达式

  • 字符串表达式

数值表达式

    -gt:是否大于;     大于,全拼为greate than

    -ge:是否大于等于;   大于等于,全拼为greater equal

    -eq:是否等于;     相等,全拼为equal

    -ne:是否不等于;    不相等,全拼为not equal

    -lt:是否小于;     小于,全拼为less than

    -le:是否小于等于;   小于等于,全拼为less equal

字符串表达式

    ==:是否等于;

    >:是否大于;

    <:是否小于;

    !=:是否不等于;

    =~:左侧字符串是否能够被右侧的PATTERN所匹配;

Note:此表达式一般用于` `中;

    -z "STRING":测试字符串是否为空,空则为真,不空则为假;

    -n "STRING":测试字符串是否不空,不空则为真,空则为假;

Note:用于字符串比较时乃至的操作数都应该使用引导

示例:

[root@C7-1 ~]# name=obama

[root@C7-1 ~]# [ -z "$name" ]

[root@C7-1 ~]# echo $?

1


存在性测试

-a FILE:这个很少用,一般用-e

-e FILE:文件存在测试,存在为真。


存在性及类别测试

-b FILE:是否存在且为块设备文件;

-c FILE:是否存在且为字符设备文件;

-f FILE:是否存在且为普通文件,存在为真,否则为假

-d FILE:是否存在且为目录文件;

-h FILE或 -L FILE:存在且为符号链接文件;

-p FILE:是否存在且为命令管道文件;

-S FILE:是否存在且为套接字文件;

文件权限测试:

-r FILE:是否存在且可读

-w FILE:是否存在且可写

-x FILE:是否存在且可执行

文件特殊权限测试:

-g FILE:是否存在且拥有sgid权限;

-u FILE:是否存在且拥有suid权限

-k FILE:是否存在且拥有stick权限

文件大小测试:

-s FILE:是否存在且非空;

文件是否打开:

-t fd:fd表示文件描述符是否已打开且与某终端相关

-N FILE:文件自动上一次被读取之后是否被修改过;

-O FILE:当前有效用户是否为文件的属主;

-G FILE:当前有效用户是否为文件的属组;

双目测试:

FILE1 -ef FILE2:FILE1与FILE2是否指向同一个设备上的相同inode

FILE1 -nt FILE2:FILE1是否新于FILE2;

FILE1 -ot FILE2:FILE1是否旧于FILE2;

组合测试条件:


引用:

Linux Shell脚本攻略

字符串比较

使用字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误,所以最好避开它们。

可以用下面的方法检查两个字符串,看看它们是否相同。

  • [[ $str1 = $str2 ]]:当str1等于str2时,返回真。也就是说,str1和str2包含的文本是一模一样的。

  • [[ $str1 == $str2 ]]:这是检查字符串是否相等的另一种写法。

也可以检查两个字符串是否不同。

  • [[ $str1 != $str2 ]]:如果str1和str2不相同,则返回真。

我们还可以检查字符串的字母序情况,具体如下所示。

  • [[ $str1 > $str2 ]]:如果str1的字母序比str2大,则返回真。

  • [[ $str1 < $str2 ]]:如果str1的字母序比str2小,则返回真。

  • [[ -z $str1 ]]:如果str1包含的是空字符串,则返回真。

  • [[ -n $str1 ]]:如果str1包含的是非空字符串,则返回真。


逻辑运算:

第一种方式:

COMMAND1 && COMMAND2     注:先执行COMMAND1,只有在COMMAND1执行成功时,COMMAND2才能够执行

COMMAND1 || COMMAND2     注:先执行COMMAND1,只有在COMMAND1执行失败时,COMMAND2才能够执行

! COMMAND

[ -e FILE ] && [ -r FILE ] 存在且可读

第二种方式:

EXPRESSION1 -a EXPRESSION2

EXPRESSION1 -o EXPRESSION2


示例

bash条件测试_第1张图片


bash条件测试_第2张图片


bash条件测试_第3张图片


bash条件测试_第4张图片




[zdw@c7 ~]$ [ ! \( -r /tmp/file100.sh -o -w /tmp/file100.sh \) ]

[zdw@c7 ~]$ echo $?

0

d