五、添加数学运算

shell脚本中添加数学运算

1、使用 expr 命令

Bourne shell提供了一个特别的命令用来处理数学表达式。expr命令允许在命令行 上处理数学表达式

语法:

expr  n 运算符 n

例1: 运算符两侧必须有空格

[root@localhost ~]# 1+5
bash: 1+5: 未找到命令...
[root@localhost ~]# expr 1+5
1+5
[root@localhost ~]# expr 1 + 5
6
[root@localhost ~]# 1 + 5
bash: 1: 未找到命令...

许多expr命令操作符在shell中另有含义(比如星号,)。当它们出现在在expr命令中时,会得到一 些诡异的结果。这时候需要使用转义符( \ )

例2:

[root@localhost ~]# expr 1 * 5
expr: 语法错误
[root@localhost ~]# expr 1 \* 5
5
[root@localhost ~]# expr 1 | 5
bash: 5: 未找到命令...
[root@localhost ~]# expr 1 \| 5
1

 

expr命令操作符
操 作 符 描 述
ARG1 | ARG2  如果ARG1既不是null也不是零值,返回ARG1;否则返回ARG2
ARG1 & ARG2  如果没有参数是null或零值,返回ARG1;否则返回0
ARG1 < ARG2  如果ARG1小于ARG2,返回1;否则返回0
ARG1 <= ARG2 如果ARG1小于或等于ARG2,返回1;否则返回0
ARG1 = ARG2  如果ARG1等于ARG2,返回1;否则返回0
ARG1 != ARG2  如果ARG1不等于ARG2,返回1;否则返回0
ARG1 >= ARG2  如果ARG1大于或等于ARG2,返回1;否则返回0
ARG1 > ARG2  如果ARG1大于ARG2,返回1;否则返回0
ARG1 + ARG2  返回ARG1和ARG2的算术运算和
ARG1 - ARG2  返回ARG1和ARG2的算术运算差
ARG1 * ARG2  返回ARG1和ARG2的算术乘积
ARG1 / ARG2  返回ARG1被ARG2除的算术商
ARG1 % ARG2  返回ARG1被ARG2除的算术余数
STRING : REGEXP  如果REGEXP匹配到了STRING中的某个模式,返回该模式匹配
match STRING REGEXP  如果REGEXP匹配到了STRING中的某个模式,返回该模式匹配
substr STRING POS LENGTH  返回起始位置为POS(从1开始计数)、长度为LENGTH个字符的子字符串
index STRING CHARS  返回在STRING中找到CHARS字符串的位置;否则,返回0
length STRING  返回字符串STRING的数值长度
+ TOKEN  将TOKEN解释成字符串,即使是个关键字
(EXPRESSION)  返回EXPRESSION的值

 如果使用expr的运算结果,赋值给变量,需要使用 ` ` 将expr运算括起来

[wang@localhost ~]$ a=`expr 3 + 2`
[wang@localhost ~]$ echo $a
5

2、使用方括号[]

在bash中,将一个数学运算结果赋给某个变量时,可以用美元符和 方括号($[ operation ])将数学表达式围起来。

语法:

变量=$[数学运算]

例3:

[root@localhost ~]# a=$[2*5]
[root@localhost ~]# echo $a
10

在使用方括号来计算公式时,不用担心shell会误解乘号或其他符号,不需要使用转义符( \ )

3、浮点运算

bash shell数学运算符只支持整数运算。若要进行任何实际的数学计算,可使用如下方式:

1)bc计算器

bc是内建的bash计算器,最常见的方案 。

在shell提示符下通过 bc 命令访问bash计算器,然后就可以进行数学运算了

[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
12 + 2.3
14.3

 bash计算器能够识别:

  •  数字(整数和浮点数)
  • 变量(简单变量和数组)
  • 注释(以#或C语言中的/* */开始的行)
  • 表达式
  • 编程语句(例如if-then语句)
  • 函数

要退出bash计算器,你必须输入quit。

2)在脚本中使用bc

如何在shell脚本中帮助处理浮点运算的。用命令替换运行bc命令,并将输出赋给一个变量。

基本格式如下:

variable=$(echo "options; expression" | bc) 

options允许你设置变量。如果你需要不止一个变量,可以用分号将其分开。 expression参数定义了通过bc执行的数学表达式

例如:

#vim test
#!/bin/bash 
var1=$(echo "scale=4; 3.44 / 5" | bc) 
echo The answer is $var1 

这个方法适用于较短的运算,但有时你会涉及更多的数字。如果需要进行大量运算,在一个 命令行中列出多个表达式,使用分界符输入重定向,它允许你直接在命令行中重定向数据。在shell脚本中, 你可以将输出赋给一个变量。

 

例子:

[root@node2 tmp]# cat bc.sh
#!/bin/bash
#
num1=14.5
num2=5
num3=32.4
num4=`bc << EOF
scale=4
a=($num1 / $num2)
b=($num3 / $num2)
a + b
EOF
`
echo $num4
[root@node2 tmp]# ./bc.sh
9.3800

 

posted @ 2025-11-18 09:12  chao_xiong  阅读(7)  评论(0)    收藏  举报