expr
2009/5/23 9:22:17
EXPR
expr命令一般用于整数值,但也可用于字符串的计算,使用方法如下
以下出现的所有/字符皆为转意符号,防止shell扩展
expr ARG1 /| ARG2 ARG1不是空值或0值的话返回ARG1,否则返回ARG2
expr ARG1 /& ARG2 如果两个表达式都不是空值或者0值返回ARG1,否则返回0
比较运算:ARG1 <,>,<=,>=,=,!= ARG2 其中<,>,<=,>=运算都必须加/防止shell扩展
expr命令一般用于整数值,但也可用于字符串的计算,使用方法如下
以下出现的所有/字符皆为转意符号,防止shell扩展
expr ARG1 /| ARG2 ARG1不是空值或0值的话返回ARG1,否则返回ARG2
expr ARG1 /& ARG2 如果两个表达式都不是空值或者0值返回ARG1,否则返回0
比较运算:ARG1 <,>,<=,>=,=,!= ARG2 其中<,>,<=,>=运算都必须加/防止shell扩展
需要注意的一点是expr的结果与命令的状态返回值恰恰相反,即判断结果为真时返回1,为假时返回0,如
$ expr 1 = 1
1
$ echo $?
0
数值运算:ARG1 +,-,*,/,% ARG2 其中*需要加/
STRING : REGEXP 将STRING中的字符串与正则表达式进行比较,返回匹配的字符个数,没有匹配返回0,当REGEXP中包含子表达式时/(.../)时,返回包含实际匹配的字符串
eg:
$VALUE=accounts.doc
$expr "$VALUE" : ".*"
12
$expr "$VALUE" : "/(.*/).doc"
accounts
match STRING REGEXP 与STRING:REGEXP相同
substr STRING POS LENGTH字符串截取,截取STRING的第POS个字符开始,长度为length的字符串
$expr substr "Goodnight Ladies" 11 6
Ladies
index STRING CHARS 返回STRING中的包含CHARS中的第一个字符位置,如果没有则返回0
$expr index abcdef de
4
$expr index abcdef fd
4
length STRING 计算字符串的长度
$echo $VALUE
accounts.doc
$expr length "$VALUE"
12
在使用时如果涉及到shell变量,建议要用“”括起来,否则空串会有问题
如上面最后的例子
$VALUE=
$expr length $VALUE
expr: syntax error
当然在极特殊的时候即使加上""仍然有问题,如在某些系统中(我用于测试的RHAS4没有该问题,仅作记录)
$STR="="
$expr "$STR" = "="
此时就会报语法错误,一旦shell变量的值与 expr运算符中的一个相同,这种情况就会发生。避免这种问题的方法是,将该表达式写成:
$expr "x$STR" = "x="即可 -
数值运算:ARG1 +,-,*,/,% ARG2 其中*需要加/
STRING : REGEXP 将STRING中的字符串与正则表达式进行比较,返回匹配的字符个数,没有匹配返回0,当REGEXP中包含子表达式时/(.../)时,返回包含实际匹配的字符串
eg:
$VALUE=accounts.doc
$expr "$VALUE" : ".*"
12
$expr "$VALUE" : "/(.*/).doc"
accounts
match STRING REGEXP 与STRING:REGEXP相同
substr STRING POS LENGTH字符串截取,截取STRING的第POS个字符开始,长度为length的字符串
$expr substr "Goodnight Ladies" 11 6
Ladies
index STRING CHARS 返回STRING中的包含CHARS中的第一个字符位置,如果没有则返回0
$expr index abcdef de
4
$expr index abcdef fd
4
length STRING 计算字符串的长度
$echo $VALUE
accounts.doc
$expr length "$VALUE"
12
在使用时如果涉及到shell变量,建议要用“”括起来,否则空串会有问题
如上面最后的例子
$VALUE=
$expr length $VALUE
expr: syntax error
当然在极特殊的时候即使加上""仍然有问题,如在某些系统中(我用于测试的RHAS4没有该问题,仅作记录)
$STR="="
$expr "$STR" = "="
此时就会报语法错误,一旦shell变量的值与 expr运算符中的一个相同,这种情况就会发生。避免这种问题的方法是,将该表达式写成:
$expr "x$STR" = "x="即可 -
892

被折叠的 条评论
为什么被折叠?



