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]}

2008年8月11日 | 归档于 shell编程
标签:
本文目前尚无任何评论.

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>