shell学习八-----变量数值计算(())

数值计算
1、常用的变量数值计算
(())、let、expr、$[]、bc(小数)其他是整数。

2、(())用法(常用)
如果要执行整数计算,可以用(())就可以进行整数计算
++--                                    增加及减少,可以前置也可以放在结尾
+-!~                                    一元的正好与负号;逻辑与位的取反
*/%                                     乘、除法、与取余             
+-                                      加法、加法
< <= > >=                               比较符号
== !=                                   相当、不想等,一个=为赋值
<< >>                                   向左位移、向右位移
&                                       位的AND
^                                       位的异或
|                                       位的或
&&                                      逻辑的AND  (make && make install)
||                                      逻辑的OR  (make || make install)
?:                                      条件表达式
= += -= *= /= %= &= ^= <<= >>= |=       赋值运算符a+=1 相当于a=a+1

语法:
((表达式1,表达式2…))
特点:
1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。
2、在双括号结构中,所有变量可以不加入:“$”符号前缀。
3、双括号可以进行逻辑运算,四则运算
4、双括号结构 扩展了for,while,if条件测试运算
5、支持多个表达式运算,各个表达式之间用“,”分开


例子1:
[root@node01 ~]# ((a=1+2**3-4%3))
[root@node01 ~]# echo $a
8
[root@node01 ~]# b=$((1+2**3-4%3))
[root@node01 ~]# echo $b
8
[root@node01 ~]# echo $((1+2**3-4%3))
8
[root@node01 ~]# 
以上是三种不同的变量计算定义和使用方式
例子2:
[root@node01 ~]# echo $((a++)) 
9
[root@node01 ~]# echo $a
10
[root@node01 ~]# echo $((a++))       a是变量,a++是表达式,先不增加。
10
[root@node01 ~]# echo $a             表达式输出之后,a再自增。
11
[root@node01 ~]# echo $((++a))       先表达式计算,直接输出结果。
12
[root@node01 ~]# echo $a             a再自增。
12
[root@node01 ~]# echo $((++a))
13
[root@node01 ~]# echo $a
13


[root@node01 ~]# echo $a
12
[root@node01 ~]# echo $((++a)) 
13
[root@node01 ~]# echo $((--a))   
12


root@node01 ~]# a=3
[root@node01 ~]# echo $((a++))
3
[root@node01 ~]# echo $a
4
[root@node01 ~]# echo $((a--))
4
[root@node01 ~]# echo $a
3
[root@node01 ~]# echo $((--a))
2
[root@node01 ~]# echo $a
2
总结:
echo $((a++))和echo $((a--)) 表示先输出a自身的值,然后在进行++--的运算,
echo $((++a))和echo $((--a))表示先进行++--的运算,在输出a自身的值。
变量在前,现输出变量值,再运算;变量在后,就是先运算后输出变量的值。


$((i++))相当于   a = i++;  这个是先将i的值 赋给a,  也就是说先 a=i; i= i+1;
$((++i))相当于   b = ++i;  这个是先执行i=i+1在将i的值付给b,也就是 i=i+1; b = i;
       最后i的结果都是2(即i = 2),但是 a=1, b = 2;

上面涉及到的参数变量必须为整数(整形),不能是小数(符点数)或者字符串。 
后面的bc命令可以进行浮点数运算,但一般较少用到。 

例子3:比较大小、不成立则为0
[root@node01 ~]# echo $((3>2))
1
[root@node01 ~]# echo $((3<2))
0
[root@node01 ~]# echo $((3=2))                
-bash: 3=2: attempted assignment to non-variable (error token is "=2")
[root@node01 ~]# echo $((3==2))    这里是比较
0
[root@node01 ~]# 

例子4:1加到100
[root@node01 ~]# echo $((100*(100+1)/2))
5050

例子5:(括号里面有无空格都一样)
[root@node01 ~]# var=100
[root@node01 ~]# echo $(($var+1))
101
[root@node01 ~]# echo $(($var +1))
101
[root@node01 ~]# echo $(($var + 1))
101
[root@node01 ~]# echo $(( $var + 1 ))
101
[root@node01 ~]# 

例子6:除法、乘法、余数(取余)
[root@node01 ~]# echo $((100/5))     
20
[root@node01 ~]# echo $((100/3))
33
[root@node01 ~]# echo $((100+5))
105
[root@node01 ~]# echo $((100-5))
95
[root@node01 ~]# echo $((100*5))
500
[root@node01 ~]# echo $((100**5))
10000000000
[root@node01 ~]# echo $((100%3))   
1
例子7:
[root@node01 day4]# vi test.sh
#!/bin/sh
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@node01 day4]# sh test.sh 
“a-b =4”
“a+b =8”
“a*b =12”
“a/b =3”
“a**b =36”
“a%b =0”

考题1:用a和b传参方式来计算
[root@node01 day4]# vi test.sh 
#!/bin/sh
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@node01 day4]# sh test.sh 6 2
“a-b =4”
“a+b =8”
“a*b =12”
“a/b =3”
“a**b =36”
“a%b =0”

考题2:实现一个加减乘除等功能的计算器,通过命令行传参方式实现上面的脚本功能
传参传两个参数,传一个计算符号,出结果。
[root@node01 day4]# vi bc.sh
echo $(($1$2$3))                         分开传参
[root@node01 day4]# sh bc.sh 1 + 2
3
[root@node01 day4]# sh bc.sh 5*5
25
[root@node01 day4]# sh bc.sh 5-5
0
[root@node01 day4]# sh bc.sh 1-6
-5
第二种方法,直传给$!
[root@node01 day4]# vi js.sh
echo $(($1))                --------------------把表达式当成一个变量传进去,所有他就可以实现
[root@node01 day4]# sh bc.sh 1+2
3
[root@node01 day4]# sh bc.sh 5*5
25
[root@node01 day4]# sh bc.sh 5-5
0
[root@node01 day4]# sh bc.sh 1-6
-5

(()) 双括号建议使用,效率很高,用的最多的用法,需要熟练掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值