linux shell 比较运算符

Posted on Posted in bash
Tips: 本文创建于2013年11月12日,已超过 2 年,内容或图片可能已经失效!
运算符 描述

文件比较运算符

-s filename filename存在,大小不为0,为真
-e filename filename存在,为真
-d filename filename为目录,为真
-f filename filename为常规文件,为真
-L filename filename为符号链接,为真
-r filename filename可读,为真
-w filename filename可写,为真
-x filename filename可执行,为真
-b filename
filename为快特殊文件,为真
filename1 -nt filename2 filename1比filename2新,为真
filename1 -ot filename2 filename1比filename2旧,为真

算数比较运算符

num1 -eq num2 等于
num1 -ne num2 不等于
num1 -lt num2 小于
num1 -le num2 小于或等于
num1 -gt num2 大于
num1 -ge num2 大于或等于

字符串比较运算符(字符串都要加引号,防止空格扰乱代码)

 

-z string 长度为零,为真
-n string 长度不为零,为真
string1 = string2 字符串相同,为真
string2 != string2 字符串不同,为真

关系运算符

 

&& || !=
-a -o !=

 

整数比较

-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" ))

字符串比较

= 等于,if[ "$a" = "$b" ]
== 等于,if[ "$a" == "$b" ],与=等价注意:==的功能在[[]]和[]中的行为是不同的,如下:
[[ $a == z* ]] ? #如果$a以"z"开头(模式匹配)那么将为true
[[ $a == "z*" ]] #如果$a等于z*(字符匹配),那么结果为true
[ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
!=
不等于,如:if [ "$a" != "$b" ]
<
小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]结构中">"需要被转义
-z
字符串为"null".就是长度为0
-n
字符串不为"null"

条件变量替换

Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换条件放在{}中.
(1) ${value:-word}

? ? ? ?当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.

(2) ${value:=word}

? ?与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将 word赋值给value

(3) ${value:?message}

? ?若变量已赋值的话,正常替换.否则将消息message送到标准错误输出(若此替换出现在Shell程序中,那么该程序将终止运行)

(4) ${value:+word}

? ? ? 若变量已赋值的话,其值才用word替换,否则不进行任何替换

(5) ${value:offset}

? ${value:offset:length} 从变量中提取子串,这里offset和length可以是算术表达式.

(6) ${#value}

? ? ? 变量的字符个数

(7) ${value#pattern}

? ${value##pattern}
去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配
#与##的区别在于一个是最短匹配模式,一个是最长匹配模式.

(8) ${value%pattern}

? ${value%%pattern}
于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样

(9) ${value/pattern/string}

? ${value//pattern/string}
进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同

注意: 上述条件变量替换中,除(2)外,其余均不影响变量本身的值

 

» 转载请注明来源:若我若鱼 » linux shell 比较运算符

Leave a Reply

Your email address will not be published. Required fields are marked *

3 + 1 =