在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. PlantUML——4.实例演示1

    给自己发消息 @startuml Alice -> Alice : This is a signal to self.\nIt also demonstrates \nmultiline tex ...

  2. Codeforces 931D Peculiar apple-tree(dfs+思维)

    题目链接:http://codeforces.com/contest/931/problem/D 题目大意:给你一颗树,每个节点都会长苹果,然后每一秒钟,苹果往下滚一个.两个两个会抵消苹果.问最后在根 ...

  3. Linux学习笔记:cat、tac、more、less、head、tail查看文件内容

    Linux下查看文件内容可以通过以下命令: cat tac more less head tail nl tailf 1.cat 由第一行开始显示内容,并将所有内容输出.当文件过大时,使用cat查看不 ...

  4. Windows开机自动启动pageant,方便使用ssh链接到GitHub

    按win +r,输入 shell:startup "C:\Program Files\TortoiseGit\bin\pageant.exe" "d:\GitHubPri ...

  5. 简单实现textview文本每隔两秒就改变一次

    //这个方法可以实现文本每隔两秒就改变一次, public void textTask(){ final android.os.Handler handler=new android.os.Handl ...

  6. URLconf+MTV:Django眼中的MVC

    MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器).其中:              M 管理应用程序的状态(通常存储 ...

  7. 人生第一个快速幂的题(HDU - 1097--A hard puzzle )

    题意: 最简单的快速幂.给你两个数n和m,求n^m的最后一位: 解题思路: 额,快速幂就很简单了,这里只要最后一位可以一对每次运算都%10: 代码: #include<cstdio> #i ...

  8. Scala入门2(特质与叠加在一起的特质)

    一.介绍 参考http://luchunli.blog.51cto.com/2368057/1705025 我们知道,如果几个类有某些共通的方法或者字段,那么从它们多重继承时,就会出现麻烦.所以Jav ...

  9. 回文树练习 Part1

    URAL - 1960   Palindromes and Super Abilities 回文树水题,每次插入时统计数量即可. #include<bits/stdc++.h> using ...

  10. Javap -c 字节码解析

              栈和局部变量操作 将常量压入栈的指令 aconst_null         将null对象引用压入栈   iconst_m1         将int类型常量-1压入栈 icon ...