一文教你入门shell脚本6.0——Shell数学运算((( ))命令:整数运算,bc 命令:小数运算)

数学运算符合和指令

1、运算符号

1.1、运算符号说明

在这里插入图片描述

1.2、运算符号使用事项

  • Shell 和其它编程语言不同,Shell 不能直接进行算数运算,必须使用数学计算命令
  • 在 Bash Shell中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
    • 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串
[jmw]$ echo 2+8
2+8
[jmw]$ a=23
[jmw]$ b=$a+55
[jmw]$ echo $b
23+55
[jmw]$ b=90
[cjmw]$ c=$a+$b
[jmw]$ echo $c
23+90

2、计算命令

2.1、运算命令说明

在这里插入图片描述

2.2、运算命令使用实例

2.2.1、(( ))命令:整数运算

((表达式)) #数学运算表达式放在(())之间
  • 表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔。对于多个表达式的情况,以最后一个表达式的值作为整个 (( ))命令的执行结果
  • 可以使用$获取 (( )) 命令的结果
[jmw]$ echo $((6-3))
3
[jmw]$ i=5
[jmw]$ ((i=i*2))  #可以简写为 ((i*=2))[jmw]$ echo $i   #使用 echo 输出变量结果时要加 $。
10

[jmw]$ echo $((1+2**3-4%3)) #注意不要丢掉 $ 符号。
8
[jmw]$ b=$((1+2**3-4%3)) #运算后将结果赋值给变量,变量放在了括号的外面。
[jmw]$ echo $b
8

[jmw]$ echo $((3<8))  #3<8 的结果是成立的,因此,输出了 11 表示真
1
[jmw]$ echo $((8<3))  #8<3 的结果是不成立的,因此,输出了 00 表示假。
0
[jmw]$ if ((8>7&&5==5))  #如果 8>7 成立,并且 5==5 成立,那么输出 yes
> then
> echo yes
> fi
yes


[jmw]$ a=10
[jmw]$ echo $((a++))  #如果++在a的后面,那么在输出整个表达式时,会输出a的值,因为a为10,所以表达式的值为1010
[jmw]$ echo $a #执行上面的表达式后,因为有a++,因此a会自增1,因此输出a的值为1111
[jmw]$ a=11
[jmw]$ echo $((a--)) #如果--在a的后面,那么在输出整个表达式时,会输出a的值,因为a为11,所以表达式的值的为1111
[jmw]$ echo $a #执行上面的表达式后,因为有a--,因此a会自动减1,因此a为1010


[jmw]$ ((a=3+5, b=a+10))  #先计算第一个表达式,再计算第二个表达式
[jmw]$ echo $a $b
8 18
[jmw]$ c=$((4+8, a+b))  #以最后一个表达式的结果作为整个(())命令的执行结果
[jmw]$ echo $c
26

2.2.2、bc 命令:小数运算

  • Linux bc 命令可以很方便的进行浮点运算,当然整数运算也不再话下
  • 支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素

bc 命令还有一些选项
在这里插入图片描述

bc 有四个内置变量,我们在计算时会经常用到,如下表所示:
在这里插入图片描述
bc 还有一些内置函数:在输入 bc 命令时需要使用-l选项,表示启用数学库
在这里插入图片描述

2.2.2.1、在 Shell 中使用 bc 计算器

在 Shell 脚本中,我们可以借助管道或者输入重定向来使用 bc 计算器。

  • 管道是 Linux 进程间的一种通信机制,它可以将前一个命令(进程)的输出作为下一个命令(进程)的输入,两个命令之间使用竖线|分隔。
  • 通常情况下,一个命令从终端获得用户输入的内容,如果让它从其他地方(比如文件)获得输入,那么就需要重定向。

1、终端进入 bc
在终端输入 bc 命令,然后回车,就可以进入 bc
在这里插入图片描述
你不想输入 bc 命令后显示一堆没用的信息,那么可以输入bc -q

在这里插入图片描述
2、终端退出 bc:quit
在这里插入图片描述

3、借助管道使用 bc 计算器

echo "expression" | bc

expression就是希望计算的数学表达式,它必须符合 bc 的语法

扫描二维码关注公众号,回复: 11470582 查看本文章

bc 的计算结果赋值给 Shell 变量:

variable=$(echo "expression" | bc)

variable 就是变量名

实例

[jmw]$ echo "3*8"|bc
24
[jmw]$ ret=$(echo "4+9"|bc)
[jmw]$ echo $ret
13

//这里是scale=4,限制小数点位数
[jmw]$ echo "scale=4;3*8/7"|bc  
3.4285
[jmw]$ echo "scale=4;3*8/7;last*5"|bc
3.4285
17.1425

//$x表示使用第一条 Shell 命令中定义的变量,n是在 bc 中定义的新变量,e(n) -l启用函数库,e的n次方
[jmw]$ x=4
[jmw]$ echo "scale=5;n=$x+2;e(n)"|bc -l
403.42879

//进制转换
#十进制转十六进制
[jmw]$ m=31
[jmw]$ n=$(echo "obase=16;$m"|bc)
[jmw]$ echo $n
1F
#十六进制转十进制
[jmw]$ m=1E
[jmw]$ n=$(echo "obase=10;ibase=16;$m"|bc)
[jmw]$ echo $n
30

参考

1、http://c.biancheng.net/view/1169.html
2、http://c.biancheng.net/view/2680.html

猜你喜欢

转载自blog.csdn.net/JMW1407/article/details/107484889