`

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

 
分享到:
评论

相关推荐

    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 > 然后,您...

    expr:表达式计算器示例

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

    expr_Gibbs_sampling.py

    Gibbs Sampling代码,python实现,代码仅有对一元线性回归的简单情况,配合博文【ML】线性回归的吉布斯采样(Gibbs Sampling)实现(python)使用

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

    简单的进程调度程序,包含先进先出和优先级调度程序,自己可以加入一些初始化设定,可以更好的模拟系统运行

    使用matlab做的简单网络爬虫-DataRetrieval.m

    使用matlab做的简单网络爬虫-DataRetrieval.m 朋友需要做金融方面的分析,要求从网站上下载大量的数据,一个一个复制粘贴太费事。我写了一个简单的网络爬虫,主要用到正则表达式的东西,可以自动下载网站上的数据...

    编译实验 计算器

    实现简单的计算器功能 编译实验

    Python中条件判断语句的简单使用方法

    最简单的条件语句: if expression: expr_true_suite 如上,if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and、or和not连接,expr_true_suite是代码块,expression为true...

    expr-ssa-tmp

    专家 将简单表达式类型转换为SSA程序的代码示例。 用于演示UKC 2021项目周的GitHub Actions。

    bdparsii:超级快速,简单的Java编写的数学表达式计算器,BigDecimal版本

    使用它很简单: Scope scope = Scope . create(); Variable a = scope . getVariable( " a " ); Expression expr = Parser . parse( " 3 + a * 4 " , scope); a . setValue( 4 ); System . out . println(expr . ...

    《Oracle Database编程指南》14-03:CASE表达式(CASE Expressions)

    在一个简单的CASE表达式中,当表达式expr的值等于比较表达式comparison_expr的值时,则执行返回表达式return_expr的值。如果没有满足expr这个条件,并且存在一个ELSE子句,将返回else_expr的值。否则,Oracle返回...

    文本方式下字处理程序的设计与实现

    清晰且易于操作的用户界面 动态显示光标的当前位置 在文本编辑区接受并保存输入信息 光标上移,下移,左移,右移 允许删除当前光标后的字符 将编辑文本存盘,读出并显示硬盘中的指定文件

    Python实现一个简单的递归下降分析器

    如果语法非常简单,你可以不去使用一些框架,而是自己写这个解析器。 解决方案 在这个问题中,我们集中讨论根据特殊语法去解析文本的问题。 为了这样做,你首先要以BNF或者EBNF形式指定一个标准语法。 比如,一个...

    php for 循环语句使用方法详细说明

    for循环允许你定义一个简单的代码行这些步骤。它似乎有一种奇怪的形式,所以一定要密切注意语法用! for 循环的语法是: for (expr1; expr2; expr3) statement 第一个表达式(expr1)在循环开始前无条件求值一次。 ...

    cubiml-demo:一种简单的类似于ML的编程语言,带有子类型和完整类型推断

    Cubiml使用三次均一化,这是一种基于类型化的更快,更简单的类型推断算法。 Cubiml并非旨在独自使用,而是用作实现三次二元化的教程,因此具有故意最小的功能集。用法您可以在浏览器中通过在线试用cubiml。Cubiml...

    jQuery-Class:JQuery学习的学习空间

    jQuery方法覆盖jQuery skipNav,navigationMenu插件制作jQuery.expr.pseudos扩展Sizzle引擎扩展自定义虚拟选择器的新方法是使用jQuery.expr.createPseudo()方法。 此方法仅在用户创建的虚拟类选择器中输入元值时使用...

    ExpressionParser:使用 BNF 的数学表达式解析器

    ExpressionParser使用巴克诺范式(BNF)实现的简单数学表达式解析器。特性简单轻量支持基本的+,-,*,/,%,括号等支持自定义常量支持自定义变量支持自定义函数使用//自定义函数double Multiply_Four(double value){ ...

    php while循环控制的简单实例

    该语法表示,只要expr表达式为TRUE,那么就一直执行statement直到expr为FALSE为止,statement表示要执行的动作或逻辑。   <?php $i = 1; while ($i <= 10) { echo $i; $i++; } ?> 该例子循环输出1到10...

    humble:Humble是一个简单的图形约简引擎

    规则使用我能想到的最简单的模式匹配算法,将其天真地转换为if语句。 规则可以延迟应用; 仅在最高级别,并且由规则决定,以减少他们的争论。 或杂乱无章从叶节点开始应用规则,直到根为止。 定义规则 (Compile ...

Global site tag (gtag.js) - Google Analytics