Linux shell编程学习笔记10:expr命令 和 算术运算

2023-10-11 13:20

本文主要是介绍Linux shell编程学习笔记10:expr命令 和 算术运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算。上节我们研究了  Linux shell编程 中的 字符串运算,今天我们研究 Linux shell编程的算术运算 ,为了方便举例,我们同时对expr命令进行介绍。

一、expr命令的用法

expr(evaluate expressions)命令是Unix/Linux中的一个命令行表达式计算工具,一般用于整数值计算,但也可用于字符串操作。 之些我们也在一些实例使用了这个命令,这次我们对这个命令作一个详细的介绍。

在Linux终端输入命令expr --help,可以查看expr命令的帮助信息。

user @host: ~ $ expr --help
用法:expr 表达式
 或:expr 选项

      --help        显示此帮助信息并退出
      --version        显示版本信息并退出

将表达式的值列印到标准输出,分隔符下面的空行可提升算式优先级。
可用的表达式有:

  ARG1 | ARG2       若ARG1 的值不为0 或者为空,则返回ARG1,否则返回ARG2

  ARG1 & ARG2       若两边的值都不为0 或为空,则返回ARG1,否则返回 0

  ARG1 < ARG2       ARG1 小于ARG2
  ARG1 <= ARG2      ARG1 小于或等于ARG2
  ARG1 = ARG2       ARG1 等于ARG2
  ARG1 != ARG2      ARG1 不等于ARG2
  ARG1 >= ARG2      ARG1 大于或等于ARG2
  ARG1 > ARG2       ARG1 大于ARG2

  ARG1 + ARG2       计算 ARG1 与ARG2 相加之和
  ARG1 - ARG2       计算 ARG1 与ARG2 相减之差

  ARG1 * ARG2       计算 ARG1 与ARG2 相乘之积
  ARG1 / ARG2       计算 ARG1 与ARG2 相除之商
  ARG1 % ARG2       计算 ARG1 与ARG2 相除之余数

  字符串 : 表达式        定位字符串中匹配表达式的模式

  match 字符串 表达式        等于"字符串 :表达式"
  substr 字符串 偏移量 长度    替换字符串的子串,偏移的数值从 1 起计
  index 字符串 字符        在字符串中发现字符的地方建立下标,或者标0
  length 字符串            字符串的长度
  + TOKEN                    interpret TOKEN as a string, even if it is a
                               keyword like 'match' or an operator like '/'

  ( EXPRESSION )             value of EXPRESSION

请注意有许多运算操作符都可能需要由 shell 先实施转义。
如果参与运算的 ARG 自变量都是数字,比较符就会被视作数学符号,否则就是多义的。
模式匹配会返回"\"和"\"之间被匹配的子字符串或空(null);如果未使用"\"和"\",
则会返回匹配字符数量或是 0。

若表达式的值既不是空也不是 0,退出状态值为 0;若表达式的值为空或为 0,
退出状态值为 1。如果表达式的句法无效,则会在出错时返回退出状态值 3。

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告expr 的翻译错误
Full documentation at: <http://www.gnu.org/software/coreutils/expr>
or available locally via: info '(coreutils) expr invocation'       

 

已经说得非常详细了。

下面我结合算术运算符的实例来进一步加深对expr命令的认识。

二、Linux Shell脚本编程中的算术运算符

运算符说明
+加法
-减法
*乘法
/除法
%取余
=赋值
==相等。用于比较两个数字,相同则返回 1(true),否则返回0(false)。
!=不相等。用于比较两个数字,不相同则返回 1(true),否则返回0(false)。

对于熟悉C/C++/Java/Javascrpt等语言的用户说,这些运算符很眼熟吧。 Linux Shell脚本编程中的算术运算符 与 C/C++/Java/Javascrpt等语言是相同的。

但是在具体应用上,Linux Shell脚本编程中有3点需要特别注意:

1.赋值运算符=

我们之前也强调过,赋值运算符=两边不能用空格分隔。

例如定义变量var1并初始化赋值为"abc",正确写法是var1="abc"。

user @host: ~ $ var1 = "abc"
var1:未找到命令
user @host: ~ $ var1="abc"
user @host: ~ $ echo $var1

abc

user @host: ~ $

2.乘法运行符*

使用乘法运行符*时,通常要在它前面加上转意符/。

3.除了赋值运算符=外,其它运算符两侧均需要用空格与运算对象分隔。

我们结合下面的操作实例来体验。

三、Linux Shell算术运算操作实例

user @host: ~ $ d1=2
user @host: ~ $ d2=3
user @host: ~ $ echo `expr $d1 + $d2`
5
user @host: ~ $ echo `expr $d1 - $d2`
-1
user @host: ~ $ echo `expr $d1 * $d2`
expr: 语法错误

user @host: ~ $ echo `expr $d1 \* $d2`
6
user @host: ~ $ echo `expr $d1 / $d2`
0
user @host: ~ $ echo `expr $d1 % $d2`
2
user @host: ~ $ echo `expr $d1 == $d2`
0
user @host: ~ $ echo `expr $d1 != $d2`
1
user @host: ~ $ echo `expr $d1!=$d2`

2!=3

user @host: ~ $ 

在上面的例子中,我们先后定义了变量d1和d2,并初始化赋值为2和3,然后对d1和d2分别进行加、减、乘、除、取余、相等 和不相等运算。

在进行乘法运算时,如果乘号*前面没有放转义符\,命令会出错:

expr: 语法错误

在最后一条命令

echo `expr $d1!=$d2`

中 不等于运算符!=和运算对象变量d1和d2之间没有放空格来间隔,!=被当成字符串原样输出:

2!=3

特别说明一点,上面实例中echo命令行中使用的是反引号,不是单引号。 

这篇关于Linux shell编程学习笔记10:expr命令 和 算术运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/188343

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在