前言

有时,在处理命令行时(特别是在处理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

  1. root@ubuntu:~# expr +
  2. +
  3. root@ubuntu:~# expr -
  4. -
  5. root@ubuntu:~# expr *
  6. *
  7. root@ubuntu:~# expr /
  8.  
  9. root@ubuntu:~# expr %

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

  1. root@ubuntu:~# expr *
  2. expr: syntax error
  3. root@ubuntu:~# expr *
  4. *
  5. root@ubuntu:~# expr \*
  6. *
  7. root@ubuntu:~# expr \*

使用expr进行逻辑操作

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

ARG1 | ARG2

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

注意:|也需要使用转义

  1. root@ubuntu:~# export a=
  2. root@ubuntu:~# export b=
  3. root@ubuntu:~# expr $a \| $b
  4.  
  5. root@ubuntu:~# export a=
  6. root@ubuntu:~# export b=
  7. root@ubuntu:~# expr $a \| $b

ARG1 & ARG2

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

注意:&也需要使用转义

  1. root@ubuntu:~# export a=
  2. root@ubuntu:~# export b=
  3. root@ubuntu:~# expr $a \& $b
  4.  
  5. root@ubuntu:~# export a=
  6. root@ubuntu:~# export b=
  7. root@ubuntu:~# expr $a \& $b
  8.  
  9. root@ubuntu:~# export a=
  10. root@ubuntu:~# export b=
  11. root@ubuntu:~# expr $a \& $b

ARG1 < ARG2

  1. root@ubuntu:~# export a=
  2. root@ubuntu:~# export b=
  3. root@ubuntu:~# expr $a \< $b
  4.  
  5. root@ubuntu:~# expr $b \< $a

ARG1 <= ARG2

  1. root@ubuntu:~# export a=
  2. root@ubuntu:~# export b=
  3. root@ubuntu:~# expr $a \<= $b
  4.  
  5. root@ubuntu:~# expr $a \<= $b+
  6.  
  7. root@ubuntu:~# expr $a \<= $b+

ARG1 = ARG2

  1. root@ubuntu:~# export a=
  2. root@ubuntu:~# export b=
  3. root@ubuntu:~# expr $a = $b
  4.  
  5. root@ubuntu:~# expr $a \= $b
  6.  
  7. root@ubuntu:~# expr $a \= $b+
  8.  
  9. root@ubuntu:~# expr $a = $b+

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

ARG1 != ARG2

ARG1 >= ARG2

ARG1 > ARG2

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

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

计算字符串长度

注:包含空格时需要转移

  1. root@ubuntu:~# expr length hello
  2.  
  3. root@ubuntu:~# expr length hello\ world

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

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

  1. root@ubuntu:~# expr substr we\ are\ family
  2. family

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

语法:expr index [string] [chars]

  1. root@ubuntu:~# expr index RNG\ NB NG

Linux命令——expr的更多相关文章

  1. LINUX命令总结 -------来自 水滴娃娃 的CSDN

    LINUX命令总结 标签: LINUX命令总结 2014-01-27 15:54 41039人阅读 评论(1) 收藏 举报  分类: linux(1)  版权声明:本文为博主原创文章,未经博主允许不得 ...

  2. linux shell expr 使用

    linux shell expr 使用 收藏人:春秋百味 -- | 阅: 转: | | 分享 非原创, 摘自:<LINUX与UNIX Shell编程指南> 17.5 expr用法 expr ...

  3. Linux命令行技巧

    Linux命令行技巧 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man | ps2pdf - > man.pdf 生成一个PDF格 ...

  4. 【改造Linux命令之rm - 删除文件或目录-】

    用途说明 rm命令是常用的命令,用来删除文件或目录(remove files or directories).它也是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比 ...

  5. linux 命令总结(转载)

    linux 命令总结(转载) 1. 永久更改ip ifconfig eth0 新ip 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip 2.从Lin ...

  6. 十年linux命令总结

    十年linux命令总结 本文链接: http://codingstandards.iteye.com/blog/786653 关于命令类型划分 本表中列出了我穷尽了我所有的记忆整理出来的Linux命令 ...

  7. linux 命令中英文对照,收集

    linux 命令中英文对照,收集   linux 命令英文全文 Is Linux CLI case-sensitive? The answer is, yes. If you try to run L ...

  8. [转帖]Linux命令中特殊符号

    Linux命令中特殊符号 转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html   在shell中常用的特殊符号罗列如下:# ; ;; . ...

  9. [转帖]50个必知的Linux命令技巧,你都掌握了吗?

    50个必知的Linux命令技巧,你都掌握了吗? https://blog.51cto.com/lizhenliang/2131141 https://blog.51cto.com/lizhenlian ...

随机推荐

  1. centos配置/etc/mail.rc发邮件

    安装mailx: yum install mailx vi /etc/mail.rc set from=524755798@qq.comset smtp="smtps://smtp.qq.c ...

  2. 【Leetcode_easy】965. Univalued Binary Tree

    problem 965. Univalued Binary Tree 参考 1. Leetcode_easy_965. Univalued Binary Tree; 完

  3. Samba访问控制smb.conf

    访问控制 Samba的访问控制通过hosts allow(配置允许访问的客户端).hosts deny(配置拒绝访问的客户端)两个参数实现. 在Samba中使用hosts allow.hosts de ...

  4. __iter__方法demo

    class Foo(object): def __init__(self,name,data_list): self.name = name self.data_list = data_list de ...

  5. 深入css过渡transition

    通过过渡transition,可以让web前端开发人员不需要javascript就可以实现简单的动画交互效果.过渡属性看似简单,但实际上它有很多需要注意的细节和容易混淆的地方. 过渡transitio ...

  6. use azure-cli to manage resources

    登陆 注意: 在Azure China中使用Azure CLI 2.0之前,请首先切换环境, 运行: az cloud set -n AzureChinaCloud 如果想切回全球的版本: az cl ...

  7. 将linux的root用户的家目录由/root切换为/home/root

    步骤1,先以root登录,然后创建目录/home/root步骤2,vi /etc/passwd里root用户的家目录为/home/root:步骤3,cp -rf /root/ /home/将原来的ro ...

  8. apache 代理配置

    apache 2.4.6版本 <VirtualHost *:8080> ServerName 21.12.13.146 DocumentRoot /root/gbhu ErrorLog / ...

  9. Windows Subsystem for Linux(wsl)使用

    由于项目有一些环境需要在linux环境运行.可用微软win10的WSL来搭配使用 安装wsl 控制面板--程序和功能--启用或关闭windows功能,适用于linux的windows系统 应用商城下载 ...

  10. python 之 前端开发(盒子模型、页面布局、浮动、定位、z-index、overflow溢出)

    11.312 盒子模型 HTML文档中的每个元素都被比喻成矩形盒子, 盒子模型通过四个边界来描述:margin(外边距),border(边框),padding(内填充),content(内容区域),如 ...