7.shell脚本基础笔记-shell算术表达式与其他操作

作者: 温新

分类: 【Linux】

阅读: 1223

时间: 2022-03-07 13:59:37

hi,我是温新,一名PHPer

总觉得自己被束缚了,但那个束缚自己的人不是别人,而自己!

Linux中变量的值默认是字符串,如果要对变量进行整型间的运算,就必须使用整型变量。如下案例得到的结果是字符串。

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">a</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">b</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">echo</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$a</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$b</span> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 1+1</span></span>

整型变量的声明及语法

方式1,声明整型变量:declare -i 变量名

方式2,进行整型运算:(())

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 方式一</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">declare <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-i</span> sum</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">a</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">b</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">sum</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span>a<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span>b</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">echo</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$sum</span> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 3</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 方式二</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">((sum <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>))</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">echo</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$sum</span> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 5</span></span>

(())中可以使用空格

在算术表达式求值中引用变量时可以不使用 %

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">x</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">y</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># (())中变量可以不使用 $</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">((sum <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> x <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> y))</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">echo</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$sum</span></span>

注意:declare -i是直接将变量声明为了整型,而(())仅仅是在运算过程中是整型,因此,运算结束后的变量的值实际还是字符串型。

除了上面的两种方式外,还有另外一种方式letlet等同于(()),不过它们有所区别。

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 两者的结果是一样的</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">(sum</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>))</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">let <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">total</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span>

(())不同的是,使用let标记变量时,不能有空格或者特殊符号,若有空格则需要使用 引号 包括,如下案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">let <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'x = 1 + 1'</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">echo</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$x</span> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 2</span></span>

算术表达式展开操作

语法:$(())

$(()) 将括号内的算术表达式求值的结果进行展开,主要用于需要将计算结果用作命令的输入参数,或需要在字符中嵌入计算结果等。

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">z</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(0, 153, 0)">$((3+5))</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">echo</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$z</span></span>

进程替换

语法<(command)>(command)

进程替换是把command的输出结果传递给另一个命令。

<span style="color: rgb(255, 192, 0);">diff <(ls /tmp/) <(/home)</span><br></br>

bash碰到<(command)时,首先会自动分配一个文件并使用该文件的路径替换(command)部分的内容。之后,进程替换括号内的命令的标准输出就会与新分配的文件相连。

历史记录展开

bash可以保存命令行输入的历史记录功能,可以使用方向键Ctrl+P进行操作。

请登录后再评论