`

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" : '.*-> \(.*\)$'` 就表示取到软连接的真实文件或真实目录。

 
分享到:
评论

相关推荐

    开源项目-antonmedv-expr.zip

    在实际使用expr时,开发者首先需要根据提供的构建脚本将库编译为可使用的二进制形式,然后通过引用库文件和头文件在自己的项目中调用expr的功能。例如,创建一个表达式对象,解析表达式字符串,然后进行求值。此外,...

    编译原理实验(基于表达式的计算器ExprEval)

    通常使用上下文无关文法(Context-Free Grammar, CFG)来描述表达式的结构。在这个实验中,你需要创建一个解析器来识别并构建抽象语法树(Abstract Syntax Tree, AST),它直观地表示了表达式的结构。 3. **抽象...

    Go-Expr是一个可以评估表达式的引擎

    Go-Expr通过引入表达式引擎,解决了这个问题,使得非程序员也能通过简单的表达式语言来控制程序的行为。这对于构建业务规则引擎尤其有用,因为业务规则经常需要根据市场变化或客户需求进行调整。 Go-Expr支持多种...

    expreval.zip_ExprEval_数学表达式

    《C语言实现的高效数学表达式计算库——ExprEval》 ...无论是简单的算术运算还是复杂的数学模型,都可以借助此库进行高效的处理。对于C语言开发者来说,这是一个非常实用的工具,能够极大地提高处理数学问题的效率。

    js_expr:用于简单 JavaScript 表达式的解析器

    js_expr 基于简单 JavaScript 表达式。构建解析器npm install gulp build dist/js_expr.js是输出使用解析器解析器以 nodejs 的module方式构建。 它导出返回function parse(expr) 。 AST 可以渲染回 JS 代码,查看 。

    java源码小程序-expr:评估Java中的数学表达式

    功能和灵活性不是优先考虑的事项,但代码足够简单,根据您的喜好进行更改应该不难。 源文件中的 Javadoc 注释提供了完整的文档,并提供了用户的视角。 安装它 要安装,请将expr.jar放在您的类路径中。 (如果你是从 ...

    expr.js:解析用户定义的表达式

    expr.js是使用生成的解析器,经过修改后可以接受json作为参数,并可以安全地评估简单的算术和逻辑表达式。 如何使用 在您的页面上包含expr.js < script src =" expr.js " > </ script > 然后,您...

    Python库 | flake8_if_expr-1.0.2-py3-none-any.whl

    安装 `flake8_if_expr` 很简单,因为它是以`.whl`格式提供的,这是一种预编译的Python轮子(wheel)包,可以直接通过pip安装: ```bash pip install flake8_if_expr-1.0.2-py3-none-any.whl ``` 安装完成后,可以在...

    expr2_fifo_ctrl.rar_先进先出_进程调度

    本项目"expr2_fifo_ctrl.rar"聚焦于两种基本的进程调度算法:先进先出(FIFO)和优先级调度。通过理解和实践这些调度算法,我们可以深入理解操作系统的工作原理。 先进先出(FIFO)调度算法是最简单的调度策略,它...

    Matlab的符号计算功能及使用方法.docx

    以下为一个简单的应用案例,求解一个二次方程: syms a b c x eqn = a*x^2 + b*x + c == 0; sol = solve(eqn, x); 通过定义符号变量 a、b、c 和 x,我们可以求解任意给定的二次方程。 总结 Matlab 的符号计算...

    IKExpressoin简易表达式引擎V2.0使用说明

    **IKExpression简易表达式引擎V2.0**是一款强大的、轻量级的Java库,用于解析和执行基于字符串的表达式。它适用于那些需要在运行时动态计算的场景,例如在业务逻辑中进行条件判断、数据计算等。下面将详细介绍这款...

    expr:表达式计算器示例

    一个用于整数数学的简单表达式计算器。 您给它一个表达式: $ expr '1 + 2' (+ 1 2) 3 它将计算结果,并另外将您的表达式返回为s表达式。 为什么? 演示gradle,测试,词法分析和递归下降解析。 安装 您的系统上...

    mysql if语句的使用,10多年工作总结

    CASE 语句可以实现非常复杂的逻辑判断,但是如果只是实现简单的逻辑判断,使用 CASE 语句就过于繁琐。 四、IF 语句的使用 IF 语句是 MySQL 提供的一种简化逻辑判断的方法。它的语法格式为:`IF(expr1, expr2, expr...

Global site tag (gtag.js) - Google Analytics