expr 简单使用

 

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的模式匹配:

 

 

  1. filename="thread1.20110325.log"  
  2. echo `expr "$filename" : '.*\([0-9]\{8\}\).*'`

注意两侧的 .* :

1. 如果左边没有 .* 则相当于有 ,也就是相当于开头必须为数字

 

2. 如果右边没有 .* 则相当于有 ,也就是相当于结尾必须为数字

 

关于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

 

link=`expr "$ls" : '.*-> \(.*\)$'` 中
expr 表示要根据某个模式去匹配字符串并返回所匹配到的字符串
或根据某个模式去计算匹配到的字符数。使用方式一般为: expr value : expression


"$ls" 表示取变量 ls 中的内容。


'.*-> \(.*\)$' 这部分是一个正则表达式, .* 部分表示任意字符, -> 是实际的两个字符, Linux 中的软链接会在使用 ls -al 命令列出文件的时候,以 "软链接 -> 真实文件" 的方式显示出软链接与其所链接的真实文件。$ 在这里表示行结束 \( 就是 (, 因为 ( shell 中属于特殊符号, 所以需要使用转义; \) 同样是转义为 ) ;

整个 `expr "$ls" : '.*-> \(.*\)$'` 就表示取到软连接的真实文件或真实目录。

 

猜你喜欢

转载自886.iteye.com/blog/2311027