• 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

      

  • 相关阅读:
    cfdem链接库地址不对的解决方法(liblmp_auto.so)
    总结入门学习OpenFOAM的资料(网址、论坛、帖子、博客等)
    运行cfdemCFDEMuti编译时出现的错误
    mapreduce 的三种测试方式
    Shell 编程
    hadoop集群搭建
    hadoop的环境配置
    hadoop 模板虚拟机环境准备以及对模板机的克隆
    linux总结
    解决maven控制台出现乱码情况
  • 原文地址:https://www.cnblogs.com/scajy/p/12762505.html
Copyright © 2020-2023  润新知