shell基础bash数值运算符-60

shell基础bash数值运算符

        一、数值运算
            没开始之前我们来看一个案例:
            [root@localhost ~]# a=1
            [root@localhost ~]# b=2
            [root@localhost ~]# c=$a+$b
            [root@localhost ~]# echo $c
            大家说这样最后会输出什么值?是3,还是??
            看图吧:
           bash的变量类型
            大家可能会奇怪,正常应该是输出a和b的和才对,为什么把算式原封不动的输出了呢?

            其实我们在前面讲过,在linux里所有变量的值默认都会被认为是字符串型的。也就是说这里把1和2都认为成是字符串分别赋值给a和b了,然后变量a和b的值相加最后赋值给变量c输出了,而变量c也认为他的值是字符串,所以就不会进行运算。

            好,那么我们就开始学习linux里的数值运算的方式。

            1、declare声明变量类型
            [root@localhost ~]# declare [+/-][选项]变量名
            选项:
                -:给变量设定类型属性
                +:取消变量的类型属性
                -i:将变量声明为整数型(integer)
                -x:将变量声明为环境变量
                -p:显示指定变量的被声明的类型

            好的,我们举几个例子:
            A、上面我们把1赋值给了变量a,我们用declare -p来查询一下这个变量的类型。
            
            [root@localhost ~]# declare -p a
            如图:
            变量类型查看
            看,什么类型都没有,但系统会默认它为字符串型。
            好,那我们用前面学习环境变量的时候的export修改变量为环境变量的命令。
            我们把变量a变成环境变量。
            [root@localhost ~]# export a
            然后我们在用declare来查询变量a的类型。
            如图:
            bash变量类型设定
            看,多了一个-x,也就是让变量a具备了-x属性,也就是环境变量属性。
            那么也就是说我们前面学习export命令就是给变量设置了-x属性而已,所以我们在这里用declare -x同样能够做到把变量变成环境变量。
            [root@localhost ~]# declare -x b
            这样就把变量b也声明成环境变量了,如图:
           bash变量设置类型
            不过我们可能更习惯用export,但其实用哪个都很方便,而且可能用declare -x会更直观一些,用哪个方法,我们自己看习惯了就。

            B、那我们再来看另外一个例子。
            [root@localhost ~]# declare -i c
            也就是把变量c变成数值型的字符串。
            [root@localhost ~]# declare +x a
            也就是把变量a的环境变量类型去掉
            如图:
           bash变量类型修改
            大家自己尝试,特别的简单。只要记住和正常的逻辑相反,+是取消属性,-号是增加属性。

             2、数值运算方法1
             [root@localhost ~]# a=1
             [root@localhost ~]# b=2
             [root@localhost ~]# declare -i c=$a+$b

            也就是说我们给c变量直接设置为数值型变量,这样一来结果就不是字符串型了,而是变成数值型,也就是说输出变量a和变量b的和了。如图:
            bash变量运算

            3、数值运算方法2
            用expr或let数值运算工具
            [root@localhost ~]# a=1
            [root@localhost ~]# b=2
            [root@localhost ~]# d=$(expr $a + $b)

            注意加号左右两侧的空格必须有,不然会报错。
            如图:
            bash数值运算方法
            这里只介绍expr,就不介绍let了,因为平时这种方法很少用,所以不多介绍。

            4、数值运算方法3
            $((运算式))或$[运算式]
            [root@localhost ~]# a=1
            [root@localhost ~]# b=2
            [root@localhost ~]# e=$(($a + $b))
            [root@localhost ~]# f=$[$a + $b]
            这两种方法是我们最常用的,也是比较符合逻辑的,大家用心学习一下就好。
            而这里的加号左右有没有空格是都可以的。
            推荐大家用双小括号的方法。
            如图:
            bash数值运算常用方法

        二、运算符

            1、在linux里运算符也同样是有优先级的高低的,只不过是优先级越高序号越高,和日常生活中不一样,日常生活中优先级越高那么序号越小,比如第一第二…
            而这里正好相反,优先级越高,序号也就越大。
            我们来看下面这些运算符优先级的表格:
            #############################################
            优先级||运算符||说明
            13    || -,+    ||单目负、单目正
            12    || !,~    ||逻辑非、按位取反或补码
            11    ||*,/,%    ||乘、除、取模
            10    || +,-    ||加、减
             9    ||<<,>> ||按位左移、按位右移
             8    ||<=,>=,<,>||小于等于、大于等于、小于、大于
             7    ||==,!=    ||等于、不等于
             6    ||  &    ||按位与
             5    ||    ^    ||按位异或
             4    ||    |    ||按位或
             3    || &&    ||逻辑与
             2    ||    ||    ||逻辑或
             1    ||=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= ||赋值、运算且赋值
             ==========================================================

             2、我们举例说明,这里只讲最常见的加减乘除和逻辑与或。
             [root@localhost ~]# a=$(( (11+3)*3/2))
             也就是在$(())里面就是数学运算,你怎么算都行,和日常算术是一样的,比如有括号的优先级最高,乘除比加减优先级高。同级别先后顺序运算。

             我们其实只要记住$()括号内是一个命令的结果,是字符串型。
             而$(( ))双括号里面的就是数值运算的结果,是数值型。
             运算的结果如图:
             bash运算符
             大家可以自己用笔算一下是不是结果是对的,呵呵。

             [root@localhost ~]# bb=$((14%3))
             注意这里不是两个数相除,而是相除后取模。
             什么是取模呢?就是两个数相处后的余数,而不是除完的商。
             14除以3得到商4余2,那么模就是2.
            
             [root@localhost ~]# cc=$(( 1 $$ 0))
             这个运算是逻辑与运算。
             逻辑与运算利用二进制的1或0作为真或假来进行逻辑运算,1为真,0为假。
             必须两个数都是1也就是真,最后才会输出为真,也就是1.
             只要有一个为0也就是假,那么输出的肯定是假,也就是0.
             如图:
            bash逻辑与运算
            看,是不是只有有一个是0那结果肯定是0.
            sorry,我中间把&&逻辑与写成$$查看进程PID的预定义变量了。

            那么我们再看看逻辑或
            [root@localhost ~]# dd=$(( 1||0 ))
            [root@localhost ~]# dd=$(( 0||0 ))
            逻辑或运算就是只有当两个数都为假,也就是都是0的时候,结果才是0,只有有一面是1,那结果就是1,如图:
            bash逻辑或运算

            逻辑运算在我们的编程当中会经常遇到,大家一定要理解透彻。

    本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:http://www.ql2015.cn,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值