Shell脚本4 -- 数学运算

ops/2024/11/19 11:24:13/

声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell (3)脚本参数传递与数学运算】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。


Shell 脚本作为 Linux 系统中的重要工具,不仅可以用来处理文件和控制流程,还可以进行各种数据运算。本文将详细介绍 Shell 中的数据运算方法,包括整数运算、浮点数运算、字符串运算等,以及如何选择最适合的工具实现高效运算。


1 数据运算分类

Shell 中常见的数据运算分为以下几类:

  • 整数运算:加减乘除、取余等基本操作。
  • 浮点数运算:需要借助外部工具如 bcawk
  • 字符串运算:长度计算、子串提取、模式匹配等。
  • 逻辑运算:逻辑与、逻辑或、非等。

2 整数运算

Shell 自带 $(( ))expr 两种方式处理整数运算。

使用 $(( ))

bash">a=10
b=3# 加法
sum=$((a + b))
echo "Sum: $sum"# 乘法
product=$((a * b))
echo "Product: $product"# 除法
quotient=$((a / b))
echo "Quotient: $quotient"# 取余
remainder=$((a % b))
echo "Remainder: $remainder"

使用 expr

bash"># 加法
sum=$(expr 10 + 3)
echo "Sum: $sum"# 乘法 (需要转义 '*')
product=$(expr 10 \* 3)
echo "Product: $product"

优劣比较:

  • $(( )) 语法更直观,推荐使用。
  • expr 适合在 POSIX 兼容的环境中使用。

3 浮点数运算

Shell 本身不支持浮点数运算,需借助工具如 bcawk

使用 bc

bash">a=10.5
b=3.2# 加法
sum=$(echo "$a + $b" | bc)
echo "Sum: $sum"# 除法(保留两位小数)
quotient=$(echo "scale=2; $a / $b" | bc)
echo "Quotient: $quotient"

使用 awk

bash">a=10.5
b=3.2# 加法
sum=$(awk "BEGIN {print $a + $b}")
echo "Sum: $sum"# 乘法
product=$(awk "BEGIN {print $a * $b}")
echo "Product: $product"

优劣比较:

  • bc:语法简单,适合复杂运算。
  • awk:功能强大,可同时处理数据运算和文件解析。

4 字符串运算

字符串的基本操作包括长度计算、子串提取和模式匹配。

计算长度:

bash">str="hello world"
length=${#str}
echo "Length of string: $length"

提取子串:

bash"># 提取从第7个字符开始的5个字符
substr=${str:6:5}
echo "Substring: $substr"

查找子串位置:

bash"># 查找字符 'o' 第一次出现的位置
position=$(expr index "$str" "o")
echo "First occurrence of 'o': $position"

5 逻辑运算

Shell 支持基本的逻辑运算,包括与、或和非。

示例:

bash">a=10
b=20if [ $a -lt $b ] && [ $a -gt 5 ]; thenecho "$a is less than $b and greater than 5"
fiif [ $a -eq 10 ] || [ $b -eq 15 ]; thenecho "Either a equals 10 or b equals 15"
fi

逻辑运算符:

  • &&:逻辑与
  • ||:逻辑或
  • !:逻辑非

6 比较运算

运算符含义示例
-lt小于(less than)[ $a -lt $b ]
-le小于等于(less or equal)[ $a -le $b ]
-gt大于(greater than)[ $a -gt $b ]
-ge大于等于(greater or equal)[ $a -ge $b ]
-eq等于(equal)[ $a -eq $b ]
-ne不等于(not equal)[ $a -ne $b ]

7 选择合适的工具

根据需求选择数据运算工具:

  • 简单整数运算:推荐 $(( )),简单高效。
  • 浮点数运算:推荐 bc,支持高精度计算。
  • 数据处理与运算结合:推荐 awk,灵活强大。
  • 跨平台兼容性:使用 expr,确保 POSIX 环境下可运行。

http://www.ppmy.cn/ops/134955.html

相关文章

2025年入门深度学习或人工智能,该学PyTorch还是TensorFlow?

随着2025应用人工智能和深度学习技术的举世泛气,还在迷茫于该选择哪个深度学习框架吗?PyTorch和TensorFlow是并立于深度学习世界两座巨塔,但是越来越多人发现,在2025年,PyTorch似乎比TensorFlow更为流行和被接受。下面…

区块链智能合约开发:全面解析与实践指南

随着区块链技术的不断发展,智能合约作为其中的核心组成部分,已经在多个领域展现出了巨大的潜力。智能合约不仅是去中心化应用(DApp)和去中心化金融(DeFi)的基础,也是推动区块链技术应用广泛发展…

跨平台WPF框架Avalonia教程 十一

控件类型 如果您想创建自己的控件,Avalonia中有三个主要的控件类型。首先要做的是选择最适合您使用场景的控件类型。 用户控件(User Controls)​ UserControl是创建控件的最简单方法。这种类型的控件最适合特定于应用程序的“视图”或“页面”。UserControl的创建…

MATLAB深度学习(二)——如何训练一个卷积神经网路

2.1 基本概念 从数学的角度看,机器学习的目标是建立输入和输出的函数关系,相当于 y F(x)的过程。F(x)就是我们所说的模型,对于使用者来说,这个模型就是一个黑箱,我们不知…

VSCode 常用的快捷键

Visual Studio Code (VSCode) 提供了丰富的快捷键来提高开发效率。 是常用的 VSCode 快捷键,按功能分类: 1. 基础编辑 Ctrl C / Ctrl V / Ctrl X:复制、粘贴、剪切当前选中的文本。Ctrl Z / Ctrl Y:撤销和重做操作。Ctrl …

简单的MCU与FPGA通过APB总线实现通讯(fpga mcu APB):乘法器为例

测试平台: GW1N4器件内置 M1内核;并且可以设置 APB总线与fpga 逻辑进行交互; 框图: +---------------------+ | | | M1 Microprocessor | <-----------------+ | | | | +-----------------…

DNS服务器Mac地址绑定与ip网路管理命令(Ubuntu24.04)

DNS server Mac绑定 查看 DNS服务器地址 resolvectl statusLink 2 (wlp2s0)Current Scopes: DNS Current DNS Server: 10.10.0.21DNS Servers: 10.10.0.21 10.10.2.21查看路由器中邻居表的内容&#xff0c;每一行表示一个网络设备的IP地址、MAC地址及其状态 ip neigh10.162.…

靓车汽车销售网站(源码+数据库+报告)

基于SpringBoot靓车汽车销售网站&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块&#xff0c;主要功能如下。 前台功能简介&#xff1a; - 首页&#xff1a;展示网站的概要信息和推荐车辆。 - 车辆展示&#xff1a;展示可供销售的汽车。 - …