前言
有时,在处理命令行时(特别是在处理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
这里*需要特别注意下,由于*时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
使用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
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
ARG1 < ARG2
root@ubuntu:~# export a=10 root@ubuntu:~# export b=5 root@ubuntu:~# expr $a < $b 0 root@ubuntu:~# expr $b < $a 1
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
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
这个还比较奇怪,=使用转义也可以,不使用也可以
ARG1 != ARG2
ARG1 >= ARG2
ARG1 > ARG2
使用expr进行字符串相关操作
expr命令还允许您执行多个与字符串相关的操作。例如,要查找字符串的长度,可以按以下方式使用该工具:
计算字符串长度
注:包含空格时需要转移
root@ubuntu:~# expr length hello 5 root@ubuntu:~# expr length hello world 11
提取给定字符串中的子字符串
语法:expr substr [string] [pos] [length]
root@ubuntu:~# expr substr we are family 8 6 family
查找给定字符串中一组字符的起始位置
语法:expr index [string] [chars]
root@ubuntu:~# expr index RNG NB NG 2