expr的用法

本文使用一些具体的计算实例来阐述expr的用法, 希望对大家有所帮助

请问我以下这些语句为什么是错误的?

sum=0

sum=`expr $sum + ${sale[1]}`

运行时提示:expr: syntax error

sale[1]是已经赋过值的数组。

我运行了一下,没有错啊

你用的是什么平台?什么shell

我运行了一下,也没有错啊

HP-UX KSH

请问$sum和${sale[1]}的值必须是整数吗?

HP-UX上提供的ksh不支持数组, 所以sale[1]是无效的。

我的环境是HP-UX ksh

我测试如下,可以通过

[/billing/hwh]num=0

[/billing/hwh]sale[1]=3

[/billing/hwh]num=`expr $num + ${sale[1]}`

[/billing/hwh]echo $num

3

我的测试结果与楼上的完全一致。

ksh是有数组的,可以这样试验一下:

[/export/binary]$ sale[1]=3

[/export/binary]$ sale[2]=4

[/export/binary]$ sale[3]=5

[/export/binary]$ echo ${sale[*]}

3 4 5

关于expr的用法,我将《LINUX与UNIX Shell编程指南》中的相关文字贴于此,作了一点修正,基本用法大概就是这些了。

===========================

17.5 expr用法

expr命令一般用于整数值,但也可用于字符串。一般格式为:

expr argument operator argument

expr也是一个手工命令行计数器。

$expr 10 + 10

20

$expr 1500 + 900

2500

$expr 30 / 3

10

$expr 30 / 3 / 2

5

(注意运算符左右都有空格)

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

$expr 30 * 3

90

17.5.1 增量计数

expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意

即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量。

$LOOP=0

$LOOP=`expr $LOOP + 1`

17.5.2 数值测试

可以用expr测试一个数。如果试图计算非整数,将返回错误。

$rr=1.1

$expr $rr + 1

expr: non-numeric argument

$rr=2

$expr $rr + 1

3

(注意:这个例子与原文不同)

这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null,

然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。

$value=12

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

$echo $?

0

这是一个数。

$value=hello

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

$echo $?

2

这是一个非数值字符。

expr也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成

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

“hello”和“hello”。

$value=hello

$expr $value = "hello"

1

$echo $?

0

expr返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表示测试成功,

“hello”确实等于“hello”。

17.5.3 模式匹配

expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任

何字符重复0次或多次。

$value=accounts.doc

$expr $value : '.*'

12

在expr中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。

$expr $value : '(.*).doc'

accounts

=============================

请问各位大虾:shell 中有数组吗?

当然有,用

$varname[0]=value1

$varname[1]=value2

....

来定义

$echo ${varname[0]}


欢迎转载本文,请注明来自:http://www.linuxsense.org

TAG: expr
发布: 2008-8-11 11:45    作者: admin    来源: 本站原创    查看: 71次

推荐给好友 上一篇 | 下一篇

查看全部1条评论

最新评论

  • 删除 引用 Guest (2008-9-15 01:46:46, 评分: 0 )

    Uncomfortable must die at heart, even lets me be unable to breathe, I thought that I soon suffocated. Because I liked you liking being too deep, I only then discovered that now loved a person well difficult good difficult, since saw your first me already deeply to like on you, I also wanted to control itself, do not demand yourself, do not demand others, might blame not to have the strength of spirit, could not control itself, that kind of feeling really let the human forever be unable to resist, wanted to your public statement, to be possible to fear that boldly you will reject, because of I small mind such setback, I rather does with you completes for a lifetime the friend, was also not willing to do with youTemporary sweetheart.
 

评分:0

我来说两句

seccode