Shell中变量及数字比较

描述

test或者if语句的判断条件参数,下面的内容都同时满足

 

整数比较

-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))

 

字符串比较

=   两个字符串是否相等
!=  两个字符转是否不等
-n    字符串长度不为零,不为零则为true
-z    字符串长度为零,为零则为true

 

==的功能在[[]]和[]中的行为如下:

=                    # 等于,如:if [ "$a" = "$b" ]
==                   # 等于,如:if [ "$a" == "$b" ],与=等价 
[[ $a == z* ]]       # 如果$a以"z"开头(模式匹配)那么将为true
[[ $a == "z" ]]      # 如果$a等于z(字符匹配),那么结果为true
[ $a == z* ]         # File globbing 和word splitting将会发生
[ "$a" == "z" ]      # 如果$a等于z(字符匹配),那么结果为true一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是. 但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.         

 

[[]]结构中大于小于符号的使用

< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]        # 注意:在[]结构中"<"需要被转义.

> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]        # 注意:在[]结构中">"需要被转义.

# 字符串的比较满足ASCII表格规则,具体参考Example 26-11来查看这个操作符应用的例子.

 

逻辑运算符 

-a    逻辑与,等于&&,&&仅能在[[]]中使用
-o    逻辑或,等于||,||仅能在[[]]中使用
!    逻辑取反,
()    改变表达式的优先级

 

文件测试

-e 文件名  如果文件存在则为真
-r 文件名  如果文件存在且可读则为真
-w 文件名  如果文件存在且可写则为真
-x 文件名  如果文件存在且可执行则为真
-s 文件名  如果文件存在且至少有一个字符则为真
-d 文件名  如果文件存在且为目录则为真
-f 文件名  如果文件存在且为普通文件则为真
-c 文件名  如果文件存在且为字符型特殊文件则为真
-b 文件名  如果文件存在且为块特殊文件则为真
file1 -ef file2  如果两个文件具有同样的设备号和i结点号则为真
file1 -nt file2  如果file1比file2新,则为真
file1 -ot file2  如果file1比file2旧,则为真

 

权限测试

-h 文件名 文件存在并且是一个硬符号链接
-L 文件名 文件存在并且是一个软符号链接
-k 文件名 文件存在并且设置了sticky位
-p 文件名 文件存在并且是一个命名管道
-S 文件名 文件存在并且是一个socket文件
-u user  文件名 文件存在且用户属主是user
-O user  文件名 文件存在并且属于有效用户ID
-g group 文件名 文件存在并且属组是group
-G group 文件名 文件存在并由有效组ID拥有
posted @ 2019-04-09 17:01  寻真丶  阅读(631)  评论(0编辑  收藏  举报