Linux命令——expr

前言

有时,在处理命令行时(特别是在处理shell脚本时),您可能会发现自己处于必须执行搜索字符串中的子字符串,查找其索引以及其他内容,或者执行比较和算术运算等情况。上述问题expr都能帮我们解决。

expr(evaluate expressions)

语法

expr EXPRESSION
expr OPTION

参数

--help:打印帮助信息并退出

--version:打印版本信息并退出

典型用法

使用expr进行算术操作

expr ARG1 + ARG2

expr ARG1 - ARG2

expr ARG1 * ARG2

expr ARG1 / ARG2

expr ARG1 % ARG2

root@ubuntu:~# expr 10+2
10+2
root@ubuntu:~# expr 10-2
10-2
root@ubuntu:~# expr 10*2
10*2
root@ubuntu:~# expr 10 / 2
5
root@ubuntu:~# expr 10 % 2
0
View Code

这里*需要特别注意下,由于*时shell内置操作符,所以expr计算乘法时需要转义

root@ubuntu:~# expr 10 * 2
expr: syntax error
root@ubuntu:~# expr 10*2
10*2
root@ubuntu:~# expr 10\*2
10*2
root@ubuntu:~# expr 10 \* 2
20
View Code

使用expr进行逻辑操作

注意:|、&、<、<=、!=都需要转义

ARG1 | ARG2

返回ARG1和ARG2中既不是null也不是0的哪个。如果ARG1和ARG2都满足要求,则返回第一个。

注意:|也需要使用转义

root@ubuntu:~# export a=0
root@ubuntu:~# export b=5
root@ubuntu:~# expr $a \| $b
5
root@ubuntu:~# export a=10
root@ubuntu:~# export b=5
root@ubuntu:~# expr $a \| $b
10
View Code

ARG1 & ARG2

ARG1和ARG2都不是null 或 0时,返回ARG1。ARG1和ARG2中至少有一个时null 或 0时时,返回0

注意:&也需要使用转义

root@ubuntu:~# export a=10
root@ubuntu:~# export b=0
root@ubuntu:~# expr $a \& $b
0
root@ubuntu:~# export a=0
root@ubuntu:~# export b=10
root@ubuntu:~# expr $a \& $b
0
root@ubuntu:~# export a=10
root@ubuntu:~# export b=5
root@ubuntu:~# expr $a \& $b
10
View Code

ARG1 < ARG2

root@ubuntu:~# export a=10
root@ubuntu:~# export b=5
root@ubuntu:~# expr $a \< $b
0
root@ubuntu:~# expr $b \< $a
1
View Code

ARG1 <= ARG2

root@ubuntu:~# export a=10
root@ubuntu:~# export b=5
root@ubuntu:~# expr $a \<= $b
0
root@ubuntu:~# expr $a \<= $b+5
1
root@ubuntu:~# expr $a \<= $b+6
1
View Code

ARG1 = ARG2

root@ubuntu:~# export a=10
root@ubuntu:~# export b=10
root@ubuntu:~# expr $a = $b
1
root@ubuntu:~# expr $a \= $b
1
root@ubuntu:~# expr $a \= $b+1
0
root@ubuntu:~# expr $a = $b+1
0
View Code

这个还比较奇怪,=使用转义也可以,不使用也可以

ARG1 != ARG2

ARG1 >= ARG2

ARG1 > ARG2

使用expr进行字符串相关操作

expr命令还允许您执行多个与字符串相关的操作。例如,要查找字符串的长度,可以按以下方式使用该工具:

计算字符串长度

注:包含空格时需要转移

root@ubuntu:~# expr length hello
5
root@ubuntu:~# expr length hello\ world
11
View Code

提取给定字符串中的子字符串

语法:expr substr [string] [pos] [length]

root@ubuntu:~# expr substr we\ are\ family 8 6
family
View Code

查找给定字符串中一组字符的起始位置

语法:expr index [string] [chars]

root@ubuntu:~# expr index RNG\ NB NG
2
View Code

 

posted @ 2018-10-20 15:15 克拉默与矩阵 阅读(...) 评论(...) 编辑 收藏