在Linux shell命令中expr虽然不是很起眼,但是它的作用是非常大的!到目前为止,我个人看来最大的作用就是两个——四则运算和字符串的操作。

先说四则运算,在Shell中四则运算不能简简单单的加减乘除,应该要写如下的格式:

$val1=`$val2 - 1`

其中“=”后面用“`”包住表达式,这个符号在Shell中十分有用,是Tab键上面“~”的原来形式。可以用来将很多命令的结果保存到一个变量中去。接着就是运算符了,运算符的左右两边必须是空格,否则会出错。

接着是强大的字符串操作:

提取指定字符的下标:expr index 内容 字符,例如:$ind=`expr index "$content" "="`

提取字符串的子串:expr substr 内容 起始位置 终点位置,例如:$con=`expr substr "$content" "1" $ind

----------------------------------------------

expr命令一般用于整数值,但也可用于字符串。一般格式为: 
expr argument operator argument 
expr也是一个手工命令行计数器。 
$expr 10 + 10 
20 
$expr 1500 + 900 
2500 
$expr 30 / 3 
10 
$expr 30 / 3 / 2 

(注意运算符左右都有空格 ,如果没有空格表示是字符串连接) 
使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。 
$expr 30 * 3 
90

数值测试 
可以用expr测试一个数。如果试图计算非整数,将返回错误。 
$rr=1.1 
$expr $rr + 1 
expr: non-numeric argument 
$rr=2 
$expr $rr + 1 

(注意:这个例子与原文不同) 
这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null, 
然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。 
$value=12 
$expr $value + 10 > /dev/null 2>&1 
$echo $? 

这是一个数。 
$value=hello 
$expr $value + 10 > /dev/null 2>&1 
$echo $? 

这是一个非数值字符。

expr也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成 
功返回1,任何其他值为无效或错误。下面的例子测试两个字符串是否相等,这里字符串为 
“hello”和“hello”。 
$value=hello 
$expr $value = "hello" 

$echo $? 

expr返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表示测试成功, 
“hello”确实等于“hello”。

模式匹配 
expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任 
何字符重复0次或多次。 
$value=accounts.doc 
$expr $value : '.*' 
12

在expr中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。 
$expr $value : '(.*).doc' 
accounts

shell 中数组

用 
$varname[0]=value1 
$varname[1]=value2 
.... 
来定义 
用 
$echo ${varname[0]} 
方式来引用

从位置处抓取字串 
   
shell>> expr substr "this is a test" 3 5 
is is 
   
数字串 only the first character 
   
shell>> expr index "testforthegame" e 

   
字串真实重现 
   
shell>> expr quote thisisatestformela 
thisisatestformela

-----------------------------------------------

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

–格式为:

expr Expression(命令读入Expression 参数,计算它的值,然后将结果写入到标准输出)

–参数应用规则:

用空格隔开每个项;

用 \ (反斜杠) 放在 shell 特定的字符前面;

对包含空格和其他特殊字符的字符串要用引号括起来

–expr用法实例讲解:

(1)、计算字串长度

[root@kk bkeep]# expr length "bkeep zbb"   //包含空格在内

9

(2)、抓取字串

[root@kk bkeep]# expr substr "bkeep zbb" 4 9

ep zbb

(3)、抓取第一个字符数字串出现的位置

[root@kk bkeep]# expr index "bkeep zbb" e

3

(4)、整数运算 
[root@kk bkeep]# expr 14 % 9

5

[root@kk bkeep]# expr 30 / 3 / 2  //运算符与数字间一定要有空格

5

(5)、增量计数

说明:expr在循环中用于增量计算。先将变量初始化为0,然后循环值加1,反引号的用法为命令替代。

> LOOP=0

> LOOP=`expr $LOOP + 1`

(6)、数值测试

说明:用expr测试一个数。如果试图计算非整数,则会返回错误。

> rr=3.4

> expr $rr + 1

expr: non-numeric argument

> rr=5

> expr $rr + 1

6

(7)、模式匹配

说明:expr也有模式匹配功能。可以使用expr通过指定冒号选项计算字符串中字符数。

.* 意即任何字符重复0次或多次。

[root@kk bkeep]# expr bkeep.doc : '.*'

9

(8)在expr中可以使用字符串匹配操作,这里使用模式抽取.doc文件附属名。

[root@kk bkeep]# expr bkeep.doc : '\(.*\).doc'

bkeep

Linux shell命令中expr的更多相关文章

  1. Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||

    https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...

  2. 73条日常Linux shell命令汇总,总有一条你需要!

    转载: 73条日常Linux shell命令汇总,总有一条你需要! 1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo &q ...

  3. Linux shell脚本中shift

    Linux shell脚本中shift的用法说明 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本). ...

  4. 【转】shell命令中>/dev/null 2>&1的实现原理

    异步执行 exec("/alidata/server/php/bin/php /nas/wxdoctor/index.php App/Common/WordsPic/user_id/&quo ...

  5. Linux/shell命令的实际应用——查看Port占用 netstat

    启动1024端口一下,是需要root权限的 该Linux/shell命令主要用于解决: 1.查看某端口是否被占用: 2.查看某端口被哪个进程占用: 3.查看某个进程占用了哪些端口: 比如我tomcat ...

  6. [Python2.x] 利用commands模块执行Linux shell命令

    用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...

  7. java使用Runtime.exec()运行windwos dos或linux shell命令

    使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试     实例代码: package com.bookoo.test.command; imp ...

  8. Linux shell脚本中shift的用法说明【转】

    本文转载自:http://blog.csdn.net/zhu_xun/article/details/24796235 Linux shell脚本中shift的用法说明 shift命令用于对参数的移动 ...

  9. 15个有趣好玩的linux shell 命令

    今天介绍一些有趣的linux shell命令,所有的命令都可以使用man + 命令名称 来查看完整的使用方法. 1,figlet 字符画 figlet 可以将英文字符串以字符画的形式输出: >& ...

随机推荐

  1. java基础45 IO流技术(输入字符流/缓冲输入字符流)

    一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类)  ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...

  2. JAVA复习笔记:内存结构和类加载

    Part1:JVM内存结构 JVM定义了若干个程序执行期间使用的数据区域.这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁.而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出 ...

  3. Python学习笔记:一手漂亮的Python函数

    使用类和函数定义模型 函数是抽象和封装的基本方法之一 重构函数  -- 命名合理  -- 具有单一功能  -- 包含文档注释  -- 返回一个值  -- 代码不超过 50 行  -- 幂等函数,尽可能 ...

  4. MySQL学习笔记:floor、round —— 取整

    在MySQL中做数值处理,需要取整或者四舍五入. floor:函数只返回整数部分,小数部分舍弃: round:函数四舍五入: END 2018-05-29 11:31:22

  5. 关于文件格式Fuzzing测试与漏洞挖掘的学习

    最近对于文件的漏洞挖掘比较感兴趣,所以在找资料来看.顺带记录笔记,把这些笔记贴在博客中分享一下.最近打算把精力放在mp3格式的漏洞发掘上,一来这是常见的文件格式格式也比较清晰.二来这也是学长推荐的入手 ...

  6. java对象与xml相互转换工具类

    public class XmlHelper { /** * Object转XML * * @param object * @return * @throws Exception */ public ...

  7. 使用mongo-java-driver-3.0.2连接MongoDB数据库

    这里使用的mongodb的java驱动版本是:3.0.2,文件名mongo-java-driver-3.0.2.jar  博客本地下载下载网址(也可以下载其它版本):http://central.ma ...

  8. 在Ubuntu 16.04 安装python3.6 环境并设置为默认

    在Ubuntu 16.04 安装python3.6 环境并设置为默认 1.添加python3.6安装包,并且安装 sudo apt-get install software-properties-co ...

  9. python安装pip和使用pip安装Python库类比如pip安装beautifulsoup4

    初学Python时,看到很多不懂得东西,比如 pip, 是python 包管理工具,pip是easy_install的取代. Distribute是对标准库disutils模块的增强,我们知道disu ...

  10. R语言实战(十)处理缺失数据的高级方法

    本文对应<R语言实战>第15章:处理缺失数据的高级方法 本文仅在书的基础上进行简单阐述,更加详细的缺失数据问题研究将会单独写一篇文章. 处理缺失值的一般步骤: 识别缺失数据: 检查导致数据 ...