Linux Shell 脚本编程基础知识篇—shell 运算命令详解

embedded/2024/12/25 21:06:06/

ℹ️大家好,我是练小杰,本文继续Linux shell脚本编程的基础知识内容,接着讲算术运算命令的详细操作~~
复习:【shell简介以及基本操作】
更多Linux 相关内容请点击👉“Linux专栏”~

在这里插入图片描述

文章目录

  • let运算命令的用法
    • let 的高级用法
    • ⚠️注意
  • expr命令的用法
    • expr中用反引号计算表达式
    • expr计算字符串的长度
  • bc命令的用法
    • bc 的基本用法
    • 非交互模式
    • bc 的常用选项
  • $[]符号的运算
  • 读取从键盘输入的数据(read命令)
    • 举例
    • 利用read命令进行shell变量运算

在这里插入图片描述

let运算命令的用法

let命令的语法: let 赋值表达式
let赋值表达式的功能等同于“((赋值表达式))

  • 举例
#!/bin/bash
a=3
b=4
let c=a*b
echo $c   #输出:12 
((z=a*b)) 
echo "$z"  #输出:12 

let 的高级用法

  • 复合赋值
#!/bin/bash
a=3
b=4
let "a += b"  # 等同于 a = a + b
echo $a    #输出:7
  • 逻辑运算
    let 可以执行逻辑运算,如 &&(逻辑与)、||(逻辑或)、!(逻辑非)等
#!/bin/bash
a=3
b=4
c=0
#  let 进行逻辑运算
let "result = a > b && c == 0"
echo $result  # 输出: 0 (表示 false)let "result = a < b || c != 0"
echo $result  # 输出: 1 (表示 true)
  • 位运算
    let 也支持位运算,如 &(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)
#!/bin/basha=5   #二进制: 0101
b=3   #二进制: 0011#使用 let 进行位运算
let "c = a & b"
echo $c  
# 输出: 1 (因为 0101 & 0011 = 0001)let "c = a | b"
echo $c  
# 输出: 7 (因为 0101 | 0011 = 0111)let "c = a ^ b"
echo $c  
# 输出: 6 (因为 0101 ^ 0011 = 0110)let "c = ~a"
echo $c  
# 输出: -6 (因为 ~0101 = 1010, 在补码表示中为 -6)let "c = a << 1"
echo $c  
# 输出: 10 (因为 0101 << 1 = 1010)let "c = a >> 1"
echo $c  
# 输出: 2 (因为 0101 >> 1 = 0010)
  • 自增和自减
#!/bin/bash
a=1
# let 进行自增
let "a++"
echo $a  # 输出: 2# let 进行自减
let "a--"
echo $a  # 输出: 1

⚠️注意

  1. 空格问题
    使用 let 时,如果表达式中包含空格,必须使用引号将表达式括起来,否则会导致语法错误
let "a = a + 1"  # 正确
let a=a+1        #表达式不能有空格
let a = a + 1    # 错误
  1. 变量作用域
    let 是在当前 Shell 环境中执行的,因此修改变量的值会影响到后续的脚本执行

  2. let 只能处理整数运算,如果需要进行浮点运算,可以使用 bc 或其他工具。

expr命令的用法

expr(evaluate (求值) expressions (表达式)) 命令既可以用于整数运算,也可以用于相关字符串长度、匹配等的运算处理。
在使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则会报错。

expr 2 + 1  #输出:3
expr 3 \* 3   #输出: 9
#使用乘号时,必须使用反斜线屏蔽其特定含义,否则shell可能会误解*号的含义

expr中用反引号计算表达式

#!/bin/bash
i=5
i=`expr $i + 2`
echo $i #输出: 7

expr计算字符串的长度

str="my CSDN is Lxj"
expr length "$str"  #输出:14
echo ${#str}  		 #输出:14

bc命令的用法

bc是unix/Linux下的计算器,因此,除了可以作为计算器来使用,还可以作为命令行计算工具使用。
bc具有的特殊性来看,如果是小数,则选择bc运算没有问题,若是整数场景,可用“(())”、let、expr等。

  • 例子:
[root@lian ~]# bc  
2+5
7
[root@lian ~]# i=`echo "scale=4;3.2/1.3" | bc` 
该表达式的意思: 计算3.2/1.3的值,然后将该值保留4位小数  
[root@lian ~]# echo $i 
2.4615 

bc 的基本用法

  • 直接在终端输入 bc 命令,可以进入交互式计算器模式
$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1 + 1
2
5 / 2
2
scale=2
3 / 2
1.50
quit

非交互模式

使用 echoprintf 将表达式传递给 bc

# 基本运算
echo "1 + 1" | bc
# 输出: 2echo "5 / 2" | bc
# 输出: 2# 设置小数点精度
echo "scale=2; 5 / 2" | bc
# 输出: 2.50# 复杂运算
echo "scale=5; (3.14 * 2) / 7" | bc
# 输出: .89714

bc 的常用选项

-l--mathlib :加载数学库,提供更多的数学函数,如 s(正弦)、c(余弦)、a(反正切)、l(自然对数)、e(指数函数)等。

echo "scale=5; s(3.1415926535 / 2)" | bc -l
#输出: 1.00000

-q 或 --quiet:静默模式,不显示欢迎信息和警告信息

echo "1 + 1" | bc -q
# 输出: 2

$[]符号的运算

#!/bin/bash
i=$[2+5]
echo $i #输出:7

读取从键盘输入的数据(read命令)

  • read 是 Shell 内置命令,用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。

  • read 命令语法:read [-options] [variables]

  • options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。

  • optionsvariables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。

  • read命令的参数
    在这里插入图片描述

举例

[root@lian ~]# read -p "Input a string:" str
Input a string:I am LXJ!
[root@lian ~]# echo $str 
I am LXJ!

利用read命令进行shell变量运算

[root@lian ~]# read -p "Please Input a integer:"i= i
Please Input a integer:i=6
[root@lian ~]# read -p "Please Input a integer:"j= j
Please Input a integer:j=4
[root@lian ~]# echo $[i+j]
10

想要了解更多内容点击👉“练小杰的CSDN”!!!
今天星期一,再坚持4天就是星期五了!!!💪
明天见,各位大佬!!😄


http://www.ppmy.cn/embedded/148414.html

相关文章

uniapp图片数据流���� JFIF ��C 转化base64

1&#xff0c;后端返回的是图片数据流&#xff0c;格式如下 &#xfffd;&#xfffd;&#xfffd;&#xfffd; JFIF &#xfffd;&#xfffd;C 如何把这样的文件流转化为base64&#xff0c; btoa 是浏览器提供的函数&#xff0c;但在 小程序 环境中&#xff08;如微信小程序…

基础I/O -> 如何谈文件与文件系统?

文件的基础理解 空文件也要在磁盘上占据空间。文件 文件内容文件属性。文件操作 对内容的操作 对属性的操作或者是对内容和属性的操作。标定一个文件&#xff0c;必须使用&#xff1a;文件路径 文件名&#xff08;具有唯一性&#xff09;。如果没有指明对应的文件路径&…

uniapp小案例---趣味打字坤

当点击输入框时出现小鸡打字 当输入框失焦时打字鸡沉下去 原图自取 这里运用了一个三元 :class"isActive?active:"&#xff0c;当聚焦时isActivetrue从而让class绑定&#xff0c;当失焦时isActivefalse <template><view class"out"><inp…

开始探索XDP:开启Linux高性能网络编程的新篇章

XDP&#xff08;eXpress Data Path&#xff09;是 Linux 中的一项强大新网络功能&#xff0c;它允许在数据包进入网络栈之前以高性能可编程的方式访问这些数据包。然而&#xff0c;XDP 的学习曲线较高。许多开发者已经为这项功能撰写了入门博客&#xff0c;例如 Paolo Abeni 的…

【Redis经典面试题三】Redis有哪些数据类型?

目录 一、string 1.1 基本命令 1.2 使用场景 场景一&#xff1a;微博粉丝数 场景二&#xff1a;存json串 二、hash 2.1 基本命令 2.2 使用场景 三、list 3.1 基本命令 3.2 使用场景 场景一&#xff1a;微博粉丝关注列表 场景二&#xff1a;存放集群服务器日志 四…

命令行音乐库管理工具Beets

什么是 Beets &#xff1f; Beets 是一个音乐库管理系统和音乐文件元数据标签编辑器。它使用 MusicBrainz 数据库来自动填充音乐文件的元数据信息&#xff0c;并且可以通过插件系统来增加各种额外功能&#xff0c;比如自动下载专辑封面&#xff0c;歌词等。其目的是使您的音乐收…

情报信息收集能力

红队专题-Web渗透之资产思路框架知识整理 钓鱼社工 钓鱼自动化zip域名ARP欺骗快捷方式ToolsburpsuiteApp 抓包ffuf模糊测试QingScanWiresharkCloudCFEn-Decodeffffffff0xInfodirbdirmapdirsearchdnsenum使用测试常规使用使用字典文件进行dns查询子域名暴力查询部分C类IP地址IP块…

DFS入门

目录 概念应用场景基本模型例题 概念 这是一种用于遍历或搜索图&#xff08;包括树&#xff0c;树是一种特殊的图&#xff09;的算法。它从起始顶点开始&#xff0c;沿着一条路径尽可能深地探索下去&#xff0c;直到无法继续&#xff0c;然后回溯到前一步&#xff0c;继续探索其…