前端之家收集整理的这篇文章主要介绍了
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 (()) 双括号建议使用,效率很高,用的最多的
用法,需要熟练掌握。
原文链接:https://www.f2er.com/bash/391565.html