shell编程中expr的用法

    技术2026-06-15  14

    http://blogold.chinaunix.net/u2/80710/showart_1933974.html

    在网上找了好长时间,才找到这么篇好文章,给大家分享一下。

    expr 命令

    用途

    求表达式变量的值。

    语法

    expr Expression

    描述

    expr 命令读入 Expression 参数,计算它的值,然后将结果写入到标准输出。

    您必须对 Expression 参数应用以下规则:

    用空格隔开每个项。用 / (反斜杠) 放在 shell 特定的字符前面。对包含空格和其他特殊字符的字符串要用引号括起来。整数前面可以放一个一元连字符。在内部,整数被当作 32 位,双互补数。

    注:expr 命令返回一个 0 来指示一个零值,而不是空字符串。以下项描述了 Expression 参数的运算符和关键字。需要转义的字符由一个 / (反斜杠) 放在前面。这些项按照优先权递增的顺序列出,具有相等的优先权的运算符分组在 {} (大括号) 中:

    Expression1 /| Expression2 返回 Expression1如果它不是空值或者 0 值的话,否则返回 Expression2。Expression1 /& Expression2 返回 Expression1如果两个表达式都不是空值或者 0 值,否则返回一个 0 值。Expression1 { =, />, />=, /<, /<=, != } Expression2 如果两个表达式都是整数,返回整数比较的结果;否则它返回的是字符串比较的结果。Expression1 {+, - } Expression2 整数值变量的加或者减。Expression1 { /*, /, % } Expression2 整数值变量的乘、除或者提供除法的余数。Expression1 : Expression2 将 Expression1 的运算得到的字符串与 Expression2 的运算结果的正则表达式模式进行比较。正则表达式语法与 ed 命令相同,除了所有的模式固定到字符串的开始之外(也就是说,只有以字符串的第一个字符开始的序列才被正则表达式匹配)。因此 ^ (插入符号) 在这种情况下就不是特殊字符。一般地,匹配运算符返回匹配的字符个数(失败的时候返回 0)。如果模式包含了一个子表达式,也就是:

    /( Expression /)则会返回包含了实际匹配的字符的字符串。

    整理顺序可以定义在字符范围内使用的等价类。有关整理顺序和等价类的更多信息,请参阅《AIX V6.1 本地语言支持指南与参考大全》中的『了解语言环境的环境变量』。

    注: 以下字符串变量会超过标准,其行为可能在不同的操作系统中会有不同。这些字符串变量是“不”可移植的。match String1 String2 与 Expression1 : Expression2 相同。length String1 返回 String1 的长度。index String1 String2 返回 String1 中包含 String2 中任意字符的第一个位置。substr String1 StartPosition Length                          返回一个以 StartPosition 的字符开始的在 String1 中的字符串,并且是 Length 长度的字符串。退出状态

    此命令返回以下退出值:

    0 Expression 参数运算值既不为空也不为 0。1 Expression 参数的计算值或者为空或者为 0。2 Expression 参数无效。>2 发生错误。

    注:在 shell 处理完参数后,expr 命令除了利用数值外不能区分运算符和操作数。因此,如果 $a 的值是 j 的话,命令:

    expr $a = j就像:

    expr j = j在 shell 将所有的参数都传给 expr 命令之后。以下情况也为 true:

    expr X$a = Xj示例

    要修改一个 shell 变量,请输入:COUNT=`expr $COUNT + 1`这会加 1 到 shell 变量 $COUNT 上。 expr 命令以 grave accent 包装,这会导致 shell 将 expr 命令

    最新回复(0)