linux shell 比较运算符

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

文件比较运算符

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

fifteen − 1 =