shell-变量的数值运算符-计算双括号(())的使用

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

  

posted @ 2020-04-23 17:52  七月流星雨  阅读(1035)  评论(0编辑  收藏  举报