1. 变量的数值计算
变量的数值计算常见的如下几个命令:
(())、let、expr、bc、$[]
1) (())用法:(此法很常用,且效率高)
执行简单的整数运算,只需将特定的算术表达式用 "$(("和"))"扩起
shell的算术运算符合都置于"$(("......."))"的语法中。这一语法如同双引号功能,除了内嵌双引号无需转义。
2. 下面举例
范例1:shell的算术运算实例如下: [root@1-241 scripts]# ((a=1+2**3-4%3)) [root@1-241 scripts]# echo $a 8 [root@1-241 scripts]# b=$((1+2**3-4%3)) [root@1-241 scripts]# echo $b 8 [root@1-241 scripts]# echo $((1+2**3-4%3)) 8
提示:上面是三种不同的变量计算定义和使用的方式。
[root@1-241 scripts]# echo $((a+=1)) #赋值运算符(相当于a=a+1) 9 [root@1-241 scripts]# echo $((a++)) 9 [root@1-241 scripts]# echo $a 9 [root@1-241 scripts]# echo $((3>2)) #比较大小,3大于2,得出结果为1,在(())里比较大小,1为真,0为假 1 [root@1-241 scripts]# echo $((3<2)) #比较大小,3小于2,得出结果为0,在(())里比较大小,1为真,0为假 0 [root@1-241 scripts]# a=$((100*(100+1)/2)) [root@1-241 scripts]# echo $a 5050
提示:
1) **为幂运算:%为去模运算(就是除法当中取余数),加减乘除就不细说了
2) 上面涉及到的参数变量必须为整数(整型)。不能是小数(浮点数)或者字符串。后面的bc命令可以进行浮点数运算,但一般较少用到,下文会讲解。提醒下,你可以直接在shell脚本中使用上述命令进行计算。
3) echo $((a++))和echo $((a--))表示先输出a自身的值,然后在进行++ --的运算,echo $((++a)) 和 echo $((--a))表示先先进行++ --的运算,在输出a自身的值。
记忆方法:变量在前,先输出变量值,变量在后,就是先运算后输出变量的值。
范例2:--,++在变量前后的举例理解: [root@1-241 scripts]# a=10 [root@1-241 scripts]# echo $a 10 [root@1-241 scripts]# echo $((a++)) #先输出a的值,因为a为10,所以输出10 10 [root@1-241 scripts]# echo $a #上面输出a的值后,a自赠1,因此a为11 11 [root@1-241 scripts]# echo $((a--)) 11 [root@1-241 scripts]# echo $a 10 [root@1-241 scripts]# echo $((++a)) 11 [root@1-241 scripts]# echo $((--a)) 10 [root@1-241 scripts]# echo $a 10
范例3:定义变量计算的例子:
[root@1-241 scripts]# myvar=99 [root@1-241 scripts]# echo $(($myvar + 1 )) 100 [root@1-241 scripts]# echo $(( $myvar + 1 )) #( ( ) ) 两边有几个空格不敏感,也可以没有。 100 [root@1-241 scripts]# myvar=$(( $myvar + 1 )) #还可以赋值给变量然后输出变量。 [root@1-241 scripts]# echo $myvar 100
范例4:各种(())的计算命令行执行例子:
[root@1-241 scripts]# echo $(( 100 / 5 )) #除法,取商数 20 [root@1-241 scripts]# echo $(( 100 + 5 )) 105 [root@1-241 scripts]# echo $(( 100 * 5 )) 500 [root@1-241 scripts]# echo $(( 100 - 5 )) 95 [root@1-241 scripts]# echo $(( 100 ** 5 )) #次方 10000000000 [root@1-241 scripts]# echo $(( 100 % 5 )) #取模,余数 0
范例5:各种(())运算的shell脚本例子
[root@1-241 scripts]# cat test_shuangkuohao.sh #!/bin/bash a=6 b=2 echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))" 执行结果如下: [root@1-241 scripts]# sh test_shuangkuohao.sh a-b=4 a+b=8 a*b=12 a/b=3 a**b=36 a%b=0
范例6:把a、b两个变量通过命令行传参的方式实现上面的混合运算脚本的功能
[root@1-241 scripts]# cat test_shuangkuohao.sh #!/bin/bash a=$1 b=$2 echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))" 执行结果: [root@1-241 scripts]# sh test_shuangkuohao.sh 6 2 a-b=4 a+b=8 a*b=12 a/b=3 a**b=36 a%b=0
拓展,请实现一个加,减,乘,除等功能的计算器,通过命令命令行传参的方式实现上面的结果
答案: 方法1: [root@1-241 scripts]# cat d.sh echo $(($1)) [root@1-241 scripts]# sh d.sh 4+2 6 [root@1-241 scripts]# sh d.sh 4*2 8 [root@1-241 scripts]# sh d.sh 4/2 2 [root@1-241 scripts]# sh d.sh 4-2 2 方法2: [root@1-241 scripts]# cat j.sh echo $(($1$2$3)) [root@1-241 scripts]# sh j.sh 4+2 6 [root@1-241 scripts]# sh j.sh 4-2 2 [root@1-241 scripts]# sh j.sh 4*2 8 [root@1-241 scripts]# sh j.sh 4/2 2