在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. 错误/异常:The project cannot be built until build path errors are resolved 和 Unbound classpath container: 'JRE System Library [JavaSE-1.7]' in project 'MyJavaCode';的解决方法

    错误1: The project cannot be built until build path errors are resolved 解决方法: 把java的类库加载进去即可,在工程上右键 选择 ...

  2. 关于 poScreenCenter 与 poDesktopCenter

    主要是窗体水平方向与垂直方向的的 居中问题,由于水平方向 没有什么,所以不探讨.而垂直方向由于底部有个工具栏,工具栏自身有个高度,所以垂直方向的居中问题,需要探讨下. 结论: poScreenCent ...

  3. 本地删除文件,git远程不同步删除

    git add -a 或 git add * 它能stages所有文件,包括之前删除的痕迹 git add . 只能stages新文件和被修改的文件,不会stages已被删除的文件 步骤如下: 1) ...

  4. Sql Server2005 Transact-SQL 新兵器学习总结之-排名函数

    Transact-SQL提供了4个排名函数: rand() , dense_rand() , row_number() , ntile() 下面是对这4个函数的解释:rank() 返回结果集的分区内每 ...

  5. ubuntu获得root用户权限,使用xshell连接!

    一.获取root用户权限 打开linux终端命令,输入 sudo passwd root Enter new UNIX password: (在这输入你的密码) Retype new UNIX pas ...

  6. 第五届CCF软件能力认证

    1.数列分段 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, … ...

  7. 7-10 守卫棋盘 uva11214

    输入要给n*m的棋盘  均小于10   某些格子有标记  用最少的皇后  辐射到所有的标记 限时 6666ms 用IDA*    时间6000  尴尬. #include<bits/stdc++ ...

  8. Dubbo的容错与负载均衡

    虽然前面在介绍dubbo中写过这块内容,但是不够充分,这里详细写一下,在以后研究中,还会继续补充程序原理. 一:容错 1.机制 在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failove ...

  9. 洛谷P3265 [JLOI2015]装备购买 [线性基]

    题目传送门 装备购买 格式难调,题面就不放了. 分析: 一句话,有$n$件物品,每件物品有$m$个属性和一个花费值,如果一个装备的属性值可以由其他装备的属性值改变系数后组合得到那就不买,求购买最多装备 ...

  10. JSP九大内置对象简介

    1.out对象,是JspWriter类的实例,是向客户端输出内容常用的对象 方法: void println() 向客户端打印字符串 void clear() 清除缓冲区的内容,如果在flush之后调 ...