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内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

交换机救命命令手册! 思科交换机排障命令汇总指南

《交换机救命命令手册!思科交换机排障命令汇总指南》在交换机配置与故障排查过程中,总会遇到那些“关键时刻靠得住的命令”,今天我们就来分享一份思科双实战命令手册... 目录1. 基础系统诊断2. 接口与链路诊断3. L2切换排障4. L3路由与转发5. 高级调试与日志6. 性能与QoS7. 安全与DHCP8.

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

linux ssh如何实现增加访问端口

《linuxssh如何实现增加访问端口》Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改... 目录1. 修改 SSH 配置文件2. 增加或修改端口3. 保存并退出编辑器4. 更新防火墙规则使用uf