Shell 中expr的使用

  • Post author:
  • Post category:其他



1.expr命令一般用于整数值,其一般格式为:

expr argument operator argument




一般的用法是使用expr做算术运算,如:




[root@centos ~]# expr 10 + 20




30




$expr 30 / 3 / 2




5





(注意运算符左右都有空格 ,如果没有空格表示是字符串连接)





使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。如:




[root@centos ~]# expr 10 * 10   //:错误,




expr: syntax error




[root@centos ~]# expr 10 \* 10  //正确




100




2.利用expr,把输出导入/dev/null,可以作判断。




如果表达式成功,可以如下表示:

$value=12

$expr $value + 10 > /dev/null 2>&1

$echo $?

0

如果表达式失败,返回非0值

$value=hello

$expr $value + 10 > /dev/null 2>&1

$echo $?

2




3.expr也操作用于字符串




字符串比较:




expr 如果成功,返回值1,任何其他值为无效或错误。如下面的例子测试两个字符串是否相等,这里字符串为“hello”和hello”。

$value=hello

$expr $value = “hello”

1

#这时候shell的返回值为0。

$echo $?

0




4.expr的模式匹配:




关于expr模式匹配,可以使用expr通过指定冒号:选项指定要进行字符串模式匹配。 .*代表任




何字符重复0次或多次。返回值为括号中的内容.




如在tomcat的catalina.sh,使用了expr的模式匹配来获取连接文件的真实路径,例子如下:




# resolve links – $0 may be a softlink




PRG=”$0″




while [ -h “$PRG” ]; do




ls=`ls -ld “$PRG”`




link=`expr “$ls” : ‘.*-> \(.*\)$’`   #这里expr的返回值为连接文件的真实路径




if expr “$link” : ‘/.*’ > /dev/null; then #路径名返回1




PRG=”$link”




else




PRG=`dirname “$PRG”`/”$link”




fi




done