6、Shell变量的数值计算

1、常用变量的数据计算命令

(1)命令

(())、let、expr、bc、$[]、awk、declare

(2)说明

bc:能计算浮点数(小数),其它只能计算整数。最常用的是(()),效率也最高

2、双括号(())命令

运算操作符与运算命令 意义
((i=i+1)) 此种方法为运算后赋值法,不能用echo ((i=i+1)),可以使用echo $((i=i+1))
i=$((i+1)) 将表达式的值赋给i
((8>7&&5==5)) 可以比较,还可以加入逻辑与和逻辑或,用于条件判断
echo $((2+1)) 需要直接输出运算表达式的运算结果时,可以在(())前加$

(1)示例1:普通计算

[root@CentOS8 deploy]# ((a=1+2**3-4%3))
[root@CentOS8 deploy]# echo $a
8
[root@CentOS8 deploy]# b=$((1+2**3-4%3))
[root@CentOS8 deploy]# echo $b
8
[root@CentOS8 deploy]# echo $((1+2**3-4%3))
8                          

3、let命令

(1)格式

let 赋值表达式,等同于((赋值表达式))

(2)示例1:let基本用法

[root@CentOS8 deploy]# i=2
[root@CentOS8 deploy]# i=i+8
[root@CentOS8 deploy]# echo $i
i+8
[root@CentOS8 deploy]# i=2
[root@CentOS8 deploy]# let i=i+8
[root@CentOS8 deploy]# echo $i
10
[root@CentOS8 deploy]# i=2
[root@CentOS8 deploy]# echo $((i+8))
10

4、expr命令

(1)说明

expr命令一般用于整数值,但也可用于字符串,用来求表达式变量的值。同时,expr是一个手工命令行计算器。expr命令格式严格,表达式的运算符及计算的数字等各参数前后必须要有空格(多空格也行),且乘号"*"需要"\"转义。

(2)格式

expr Expression

(3)示例1:手工命令行计算器

[root@CentOS8 deploy]# expr 2 + 2
4
[root@CentOS8 deploy]# expr 2 + 1
3
[root@CentOS8 deploy]# expr 2-1 <--没有空格,当成字符串了
2-1
[root@CentOS8 deploy]# expr 2 * 3 # <--需要转义
expr: syntax error
[root@CentOS8 deploy]# expr 2 \* 3 # <--需要转义
6

(4)示例2:增量计数

[root@CentOS8 deploy]# i=0
[root@CentOS8 deploy]# i=`expr $i + 1`
[root@CentOS8 deploy]# echo $i
1

(5)示例3:与[]配合。实际是$[]的功能,用echo也一样

[root@CentOS8 deploy]# expr $[2*3]
6
[root@CentOS8 deploy]# expr $((2*3))
6
[root@CentOS8 deploy]# echo $[2*3]
6

(6)示例6:判断变量是否为整数(技巧)

[root@CentOS8 test]# cat expr.sh 
#!/bin/bash

expr 1 + $1 &> /dev/null

if [ $? -eq 0 ]
        then
                echo "This is a zhengshu"
else
                echo "This is not a zhengshu"
fi
[root@CentOS8 test]# sh expr.sh 1
This is a zhengshu
[root@CentOS8 test]# sh expr.sh 1.1
This is not a zhengshu

5、bc命令

(1)说明

bc是UNIX下的计算器,支持小数计算,也可以在命令行下执行。同时,bc支持科学计算。

(2)示例1:命令行计算功能(类似python)

[root@CentOS8 test]# 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'. 
9-8
1
5/2
2

(3)示例2:通过管道命令"|"交由bc进行计算

[root@CentOS8 test]# echo 1+1+1|bc 
3
[root@CentOS8 test]# echo 1.2+2|bc  # <-- 支持小数,正常计算
3.2

6、$[]命令

[root@CentOS8 test]# echo $[2+3]
5
[root@CentOS8 test]# echo $[2 + 3]
5
[root@CentOS8 test]# echo $[2    +    3]
5
[root@CentOS8 test]# echo $[2    *   3]  
6

7、awk实现计算

利用awk进行运算的效果也很好,适合小数和整数,特别是命令行计算,尤其是小数,运算很精确。

[root@CentOS8 test]# echo "7.7 3.8"|awk '{print ($1-$2)}'
3.9
[root@CentOS8 test]# echo "358 113"|awk '{print ($1-3)/$2}'
3.14159
[root@CentOS8 test]# echo "3 9"|awk '{print ($1+3)*$2}' 
54
posted @ 2020-08-26 07:39  博小园  阅读(212)  评论(0编辑  收藏  举报
回到顶部