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的模式匹配:
- filename="thread1.20110325.log"
- 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 表达式。构建解析器npm install gulp build dist/js_expr.js是输出使用解析器解析器以 nodejs 的module方式构建。 它导出返回function parse(expr) 。 AST 可以渲染回 JS 代码,查看 。
功能和灵活性不是优先考虑的事项,但代码足够简单,根据您的喜好进行更改应该不难。 源文件中的 Javadoc 注释提供了完整的文档,并提供了用户的视角。 安装它 要安装,请将expr.jar放在您的类路径中。 (如果你是从 ...
expr.js是使用生成的解析器,经过修改后可以接受json作为参数,并可以安全地评估简单的算术和逻辑表达式。 如何使用 在您的页面上包含expr.js < script src =" expr.js " > </ script > 然后,您...
一个用于整数数学的简单表达式计算器。 您给它一个表达式: $ expr '1 + 2' (+ 1 2) 3 它将计算结果,并另外将您的表达式返回为s表达式。 为什么? 演示gradle,测试,词法分析和递归下降解析。 安装 您的系统上...
Gibbs Sampling代码,python实现,代码仅有对一元线性回归的简单情况,配合博文【ML】线性回归的吉布斯采样(Gibbs Sampling)实现(python)使用
简单的进程调度程序,包含先进先出和优先级调度程序,自己可以加入一些初始化设定,可以更好的模拟系统运行
使用matlab做的简单网络爬虫-DataRetrieval.m 朋友需要做金融方面的分析,要求从网站上下载大量的数据,一个一个复制粘贴太费事。我写了一个简单的网络爬虫,主要用到正则表达式的东西,可以自动下载网站上的数据...
实现简单的计算器功能 编译实验
最简单的条件语句: if expression: expr_true_suite 如上,if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and、or和not连接,expr_true_suite是代码块,expression为true...
专家 将简单表达式类型转换为SSA程序的代码示例。 用于演示UKC 2021项目周的GitHub Actions。
使用它很简单: Scope scope = Scope . create(); Variable a = scope . getVariable( " a " ); Expression expr = Parser . parse( " 3 + a * 4 " , scope); a . setValue( 4 ); System . out . println(expr . ...
在一个简单的CASE表达式中,当表达式expr的值等于比较表达式comparison_expr的值时,则执行返回表达式return_expr的值。如果没有满足expr这个条件,并且存在一个ELSE子句,将返回else_expr的值。否则,Oracle返回...
清晰且易于操作的用户界面 动态显示光标的当前位置 在文本编辑区接受并保存输入信息 光标上移,下移,左移,右移 允许删除当前光标后的字符 将编辑文本存盘,读出并显示硬盘中的指定文件
如果语法非常简单,你可以不去使用一些框架,而是自己写这个解析器。 解决方案 在这个问题中,我们集中讨论根据特殊语法去解析文本的问题。 为了这样做,你首先要以BNF或者EBNF形式指定一个标准语法。 比如,一个...
for循环允许你定义一个简单的代码行这些步骤。它似乎有一种奇怪的形式,所以一定要密切注意语法用! for 循环的语法是: for (expr1; expr2; expr3) statement 第一个表达式(expr1)在循环开始前无条件求值一次。 ...
Cubiml使用三次均一化,这是一种基于类型化的更快,更简单的类型推断算法。 Cubiml并非旨在独自使用,而是用作实现三次二元化的教程,因此具有故意最小的功能集。用法您可以在浏览器中通过在线试用cubiml。Cubiml...
jQuery方法覆盖jQuery skipNav,navigationMenu插件制作jQuery.expr.pseudos扩展Sizzle引擎扩展自定义虚拟选择器的新方法是使用jQuery.expr.createPseudo()方法。 此方法仅在用户创建的虚拟类选择器中输入元值时使用...
ExpressionParser使用巴克诺范式(BNF)实现的简单数学表达式解析器。特性简单轻量支持基本的+,-,*,/,%,括号等支持自定义常量支持自定义变量支持自定义函数使用//自定义函数double Multiply_Four(double value){ ...
该语法表示,只要expr表达式为TRUE,那么就一直执行statement直到expr为FALSE为止,statement表示要执行的动作或逻辑。 <?php $i = 1; while ($i <= 10) { echo $i; $i++; } ?> 该例子循环输出1到10...
规则使用我能想到的最简单的模式匹配算法,将其天真地转换为if语句。 规则可以延迟应用; 仅在最高级别,并且由规则决定,以减少他们的争论。 或杂乱无章从叶节点开始应用规则,直到根为止。 定义规则 (Compile ...