expr命令 linux,Shell expr命令进行整数计算的实现

expr 是 evaluate expressions 的缩写,译为“表达式求值”。Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。

本节只讲解 expr 在整数计算方面的应用,并不涉及字符串处理,有兴趣的读者请自行研究。

Shell expr 对于整数计算的用法为:

expr 表达式

expr 对表达式的格式有几点特殊的要求:

出现在表达式中的运算符、数字、变量和小括号的左右两边至少要有一个空格,否则会报错。

有些特殊符号必须用反斜杠\进行转义(屏蔽其特殊含义),比如乘号*和小括号(),如果不用\转义,那么 Shell 会把它们误解为正则表达式中的符号(*对应通配符,()对应分组)。

使用变量时要加$前缀。

【实例1】expr 整数计算简单举例:

[jb51.net]$ expr 2 +3 #错误:加号和 3 之前没有空格

expr: 语法错误

[jb51.net]$ expr 2 + 3 #这样才是正确的

5

[jb51.net]$ expr 4 * 5 #错误:乘号没有转义

expr: 语法错误

[jb51.net]$ expr 4 \* 5 #使用 \ 转义后才是正确的

20

[jb51.net]$ expr ( 2 + 3 ) \* 4 #小括号也需要转义

bash: 未预期的符号 `2' 附近有语法错误

[jb51.net]$ expr \( 2 + 3 \) \* 4 #使用 \ 转义后才是正确的

20

[jb51.net]$ n=3

[jb51.net]$ expr n + 2 #使用变量时要加 $

expr: 非整数参数

[jb51.net]$ expr $n + 2 #加上 $ 才是正确的

5

[jb51.net]$ m=7

[jb51.net]$ expr $m \* \( $n + 5 \)

56

以上是直接使用 expr 命令,计算结果会直接输出,如果你希望将计算结果赋值给变量,那么需要将整个表达式用反引号``(位于 Tab 键的上方)包围起来,请看下面的例子。

【实例2】将 expr 的计算结果赋值给变量:

[jb51.net]$ m=5

[jb51.net]$ n=`expr $m + 10`

[jb51.net]$ echo $n

15

你看,使用 expr 进行数学计算是多么的麻烦呀,需要注意各种细节,我奉劝大家还是省省心,老老实实用 (())、let 或者 $[] 吧。

到此这篇关于Shell expr命令进行整数计算的实现的文章就介绍到这了,更多相关Shell expr整数计算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单身数字_完美单身

单身数字我不时遇到一些Java程序员,他们不确定他们应该如何正确实现Singleton模式。 (如果您不知道什么是Singleton,请尝试Wikipedia: Singleton模式 )。 我并不是在谈论在线程环境中的正确实现。 但是,使用…

linux下bios设置内存电压,系统安装的BIOS设置?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼要安装系统前, 要为旧系统做好备份工作,为新系统准备了所需的软件之后,接下来的工作就是安装Windows XP了。而安装系统要知道系统安装的BIOS设置, 如果您的硬盘采用了动态分区&#x…

DATEADD(Day, DATEDIFF(Day,0,ShippingTime), 0)

select DATEADD(Day, DATEDIFF(Day,0,GETDATE()), 0),DATEDIFF(Day,0,GETDATE()),GETDATE() 结果: (无列名) (无列名) (无列名)2015-01-30 00:00:00.000 42032 2015-01-30 20:04:57.050 转载于:https://www.cnblogs.com/Unrmk-LingXing/p/4263098.html

linux内存剩余量为什么这么少,为什么我的Linux系统中空闲内存如此之少?

"How come there is only so few free memory on my Linux PC?"Come to same question? No matter how much you put RAM in your motherboard, you quickly notice the free RAM is reduced so fast. Free RAM miscalculation? No!Before answering this, first …

java heroku_Heroku运行Java

java heroku如果您是像我这样的Java迷,那么您有个好消息值得振奋。 Heroku现在运行Java! 嗯,与其他流行的“ Web”语言(如PHP / RoR)不同,Java具有在Web服务器中进行部署和维护的麻烦。 一直以来&#xff0…

Java集合框架练习-计算表达式的值

最近在看《算法》这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题。 import java.util.*; /** * 用来计算表达式* for example: 12*3*(43*1)-3*123/…

关于Ecllipse

一、熟悉Eclipse 1.Eclipse是由IBM公司投资4000万美元开发的集成开发工具。它基于Java语言编写,并且是开放源代码的、可扩展的,也是目前最流行的Java集成开发工具之一。另外,IBM公司捐出Eclipse源代码,组建了Eclipse联盟&#xff…

怎么自学linux操作系统,linux操作系统好学吗_要学什么

描述linux操作系统的基础知识是比较好学的,但是需要我们通过大量地练习来牢记这些基础知识。Linux操作系统依靠其多用户和多任务、跨平台硬件支持、丰富的软件支持、可靠的安全性、良好的稳定性和完善的网络功能的优势吸引了众多用户,企业办公也逐渐使用…

JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!

如果您一直在Twitter上关注一些Java的关键人物,或者在Reddit上阅读了“新闻”,那么您一定不会错过Spring和JavaEE宣传人员之间热闹的“贱人之战”(请原谅我的法语)。 首先,于尔根霍勒(JrgenHller&#xff…

编程技术交流

需要技术交流包含java:HTML, MySQL, Redis, Linux ,Nginx ,Tomcat , IntelliJ IDEA ,SVN , Eclipse ,Maven , RationalRose, Java SE,…

Convert Sorted Array to Binary Search Tree

https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题思路: 回忆一下BST二叉搜索树的定义,他是这样一个二叉树&am…

visa linux 串口 通信,使用visa进行串口通信

最近因为项目的原因,都在研究上位机通信问题。这两个星期研究还是蛮多心得,下面就写写关于使用visa进行串口通信的内容LABVIEW软件LabVIEW 在仪器控制方面,还是很有优势的,把你仪器给你,读懂指令,然后估计半…

使用Sublime text总是弹出Unable to save...

用户设置添加: "atomic_save": false

POJ 2398 Toy Storage

这道题和POJ 2318几乎是一样的。 区别就是输入中坐标不给排序了&#xff0c;_|| 输出变成了&#xff0c;有多少个区域中有t个点。 1 #include <cstdio>2 #include <cmath>3 #include <cstring>4 #include <algorithm>5 using namespace std;6 7 struct…

linux ip forward不起作用,linux-ipforward实现

对于linux的数据包流向&#xff0c;大家应该是比较了解&#xff0c;如果还不是很了解&#xff0c;可以参考《OReilly.Understanding.Linux.Network.Internals.Dec.2005》&#xff0c;其中有一个图非常清楚的描述了数据包的流向。ip的数据包接收函数是ip_rcv()>ip_rcv_finish…

java常见的面试题

1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序C/S(Client/Server),客户端/服务端,桌面应用程序2.你所知道网络协议有那些? HTTP:超文本传输协议 FTP:文件传输协议 SMPT:简单邮件协议 TELNET:远程终端协议 POP3:邮件读取协议 3.Java都有…

java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...

此类实现:输出一行数组数据&#xff0c;根据输入的下标&#xff0c;以下标位置为结束&#xff0c;将原数组分割成两组子数组。并交换两个子数组的位置&#xff0c;保持子数组中的元素序号不变.如:原数组为7,9,8,5,3,2 以下标3为分割点&#xff0c;分割为子数组一&#xff1a;7,…

linux共享磁盘给指定ip,linux想挂载通过ipsan协议推送上来的磁盘,两个ip共分配了21个未分区的盘,...

先安装iSCSI initiator以及iscsiadmiscsiadm是基于命令行的iscsi管理工具&#xff0c;提供了对iscsi节点、会话、连接以及发现记录的操作。iscsiadm的使用说明可以查看/usr/share/doc/iscsi-initiator-utils-6.2.0.742/README&#xff0c;也可以运行man iscsiadm或iscsiadm --h…

dto与dto相互转换_在DTO上

dto与dto相互转换通常使用DTO或数据传输对象 。 什么不是s&#xff1f; 众所周知&#xff0c;它们源自DDD&#xff08;域驱动设计&#xff09;。 在那里很有意义–域对象具有状态&#xff0c;身份和业务逻辑&#xff0c;而DTO仅具有状态。 但是&#xff0c;当今许多项目正在使用…

动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据...

动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据&#xff1a;由存储过程决定&#xff0c;如果编写的存储过程可以生成需要呈现的表格则直接绑定&#xff0c;否则要动态生成表格转载于:https://www.cnblogs.com/yzl495/p/4269571.html