变量的数值计算
变量数值计算常用的命令有如下几个:
(()) let expr bc $[]
1、 (()) 用法 (此用法比较常用)
用法一:
[root@zhangjie scripts]# ((a=1+2))
[root@zhangjie scripts]# echo $a
3
用法二:
[root@zhangjie scripts]# b=$((4+7))
[root@zhangjie scripts]# echo $b
11
用法三:
[root@zhangjie scripts]# echo $((2+3*8))
26
用法四:
[root@zhangjie scripts]# echo $a
2
[root@zhangjie scripts]# echo $((a+=1)) ### 相当于a=a+1
3
用法五:
[root@zhangjie scripts]# echo $a
2
[root@zhangjie scripts]# echo $((a++))
2
[root@zhangjie scripts]# echo $a
3
说明:a++ 表示先输出a 本身的变量结果 ,然后自身再递增,就由原来的2递增到3了
[root@zhangjie scripts]# echo $a
15
[root@zhangjie scripts]# echo $((++a))
16
[root@zhangjie scripts]# echo $((++a))
17
[root@zhangjie scripts]# echo $((++a))
18
[root@zhangjie scripts]# echo $a
18
说明:先将a本身的变量结果递增,然后再a本身就变成递增后的结果了
用法六:
[root@zhangjie scripts]# echo $a
3
[root@zhangjie scripts]# echo $((a--))
3
[root@zhangjie scripts]# echo $a
2
说明:a-- 表示先输出a 本身的变量结果 ,然后自身再递减,就由原来的3递减到2了
总结:
a++
a--
++a
--a
运算符+或-在前面就是先递增或递减,然后再输出递增或递减后的变量值
运算符+或-在后面就是先输出a自身的值然后再递增或递减
用法七:
[root@zhangjie scripts]# echo $((3>2))
1
[root@zhangjie scripts]# echo $((3<2))
0
[root@zhangjie scripts]#
注:1表示真,0表示假
用法八:
[root@zhangjie scripts]# echo $((100*(1+100)/2))
5050
[root@zhangjie scripts]#
注:如上为计算1加到100的总和等于5050
运行脚本计算的例子
[root@zhangjie scripts]# cat test.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@zhangjie scripts]# sh test.sh 6 2
a+b=8 表示6加2等于8
a-b=4 表示6减去2等于4
a*b=12 表示 6乘以2等于12
a/b=3 表示6除以2等于3
a%b=0 表示6除以2的余数是多少
a**b=36 表示6的2次方
[root@zhangjie scripts]#
自制计算器
[root@zhangjie scripts]# cat test1.sh
a=$1
b=$2
c=$3
echo "$a$b$c=$(($a$b$c))"
[root@zhangjie scripts]# sh test1.sh 6 + 2
6+2=8
[root@zhangjie scripts]# sh test1.sh 6 - 2
6-2=4
[root@zhangjie scripts]# sh test1.sh 6 "*" 2
6*2=12
[root@zhangjie scripts]# sh test1.sh 6 "/" 2
6/2=3
[root@zhangjie scripts]# sh test1.sh 6 "%" 2
6%2=0
[root@zhangjie scripts]# sh test1.sh 6 "**" 2
6**2=36
2、let 的用法
[root@zhangjie scripts]# i=2
[root@zhangjie scripts]# echo $i
2
[root@zhangjie scripts]# let i=i+8
[root@zhangjie scripts]# echo $i
10
[root@zhangjie scripts]# i=2
[root@zhangjie scripts]# echo $((i=i+8))
10
[root@zhangjie scripts]# echo $i
10
注:let i=i+8 等同于$ ((i=i+8)) 但是效率上使用(())要快一些4
3、expr 命令用法 (只能用于比较简单的计算)
[root@zhangjie scripts]# expr 6 + 2
8
[root@zhangjie scripts]# expr 6 - 2
4
[root@zhangjie scripts]# expr 6 \* 2
12
[root@zhangjie scripts]# expr 6 \/ 2
3
[root@zhangjie scripts]# expr 6 \% 2
0
[root@zhangjie scripts]# i=2
[root@zhangjie scripts]# echo $i
2
[root@zhangjie scripts]# i=`expr $i + 1`
[root@zhangjie scripts]# echo $i
3
加[] 的方式
[root@zhangjie scripts]# expr $[2 + 3]
5
3、bc 命令的用法
[root@zhangjie scripts]# echo 6+2 |bc
8
[root@zhangjie scripts]# echo 6-2 |bc
4
[root@zhangjie scripts]# echo 6*2 |bc
12
[root@zhangjie scripts]# echo 6/2 |bc
3
[root@zhangjie scripts]# echo 6%2 |bc
0
[root@zhangjie scripts]# echo 3.2+1.2 |bc
4.4
[root@zhangjie scripts]# echo 3.2-1.1 |bc
2.1
[root@zhangjie scripts]# echo 3.2*2 |bc
6.4
[root@zhangjie scripts]# echo 3.2/2 |bc
1
4、$[] 运算例子
[root@zhangjie scripts]# echo $[6+2]
8
[root@zhangjie scripts]# echo $[6-2]
4
[root@zhangjie scripts]# echo $[6*2]
12
[root@zhangjie scripts]# echo $[6/2]
3
[root@zhangjie scripts]# echo $[6%2]
0
[root@zhangjie scripts]# echo $[6**2]
36
5、read 语法
read[参数][变量名]
常用参数
-p 设置提示信息
-t timeout
[root@zhangjie scripts]# read -p "please input two number: " a1 a2
please input two number: 1 2
[root@zhangjie scripts]# echo $a1 $a2
1 2
5秒钟超时时间设置
1 2
[root@zhangjie scripts]# read -t 5 -p "please input two number: " a1 a2
please input two number: [root@zhangjie scripts]#
以read方式读入的方式案例
[root@zhangjie scripts]# cat test.sh
read -t 5 -p "please input two numbers: " 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))"
echo "a**b=$(($a**$b))"
[root@zhangjie scripts]# sh test.sh
please input two numbers: 1 2
a+b=3
a-b=-1
a*b=2
a/b=0
a%b=1
a**b=1