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