shell-变量的数值计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell-变量的数值计算相关的知识,希望对你有一定的参考价值。

变量的数值计算觉的有如下命令

(())、let、expr、bc、$[]

下面看看数值计算的运算符

技术分享

(())此法很常用且效率高,用于执行整数型的计算,不支持浮点型。

如图

[[email protected] ~]# ((a=1+2**3-4%3))

[[email protected] ~]# echo $a

8

[[email protected] ~]# b=$((1+2**3-4%3))

[[email protected] ~]# echo $b

8

[[email protected] ~]# 

其中2**3是2的3次方

[[email protected] ~]# echo $((a++))

8

[[email protected] ~]# echo $a

9

[[email protected] ~]# echo $((a--))

9

[[email protected] ~]# echo $a

8

[[email protected] ~]# echo $((++a))

9

[[email protected] ~]# echo $a

9

[[email protected] ~]# echo $((--a))

8

[[email protected] ~]# echo $a

8

[[email protected] ~]# 

由上面可以看到,$((a++))是先输出a原来的值再去加,然后我们echo $a的时候,实际上就是输出变量a运算后的值啦。

记忆方法:变量在前,先输出变量值,变量在后,就是先去处后输出变量的值

上面都是整数的,如果有小数的话就会报错了,如果想用小数的话可以用bc命令

[[email protected] ~]# cat test.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 ))"

[[email protected] ~]# sh test.sh 

a-b=4

a-b=8

a-b=12

a-b=3

a-b=36

a-b=0

如果你想通过命令行传参的方式实现上面的运算的话可以修改脚本为以下的

#!/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 ))"

如图:执行命令

"test.sh" 9L, 167C 已写入

[[email protected] ~]# sh test.sh 8 2

a-b=6

a-b=10

a-b=16

a-b=4

a-b=64

a-b=0

[[email protected] ~]# sh test.sh 8 3

a-b=5

a-b=11

a-b=24

a-b=2

a-b=512

a-b=2

下面我们做一个小的计算器

[[email protected] shell]# cat compute.sh 

#!/bin/bash

echo $(($1$2$3))

[[email protected] shell]# sh compute.sh 1+2

3

[[email protected] shell]# 

当然这个是比较简单的,很多的bug我们可以看看其他人写的

http://chenhao6.blog.51cto.com/6228054/1232070

其中的一些代码就写的不错,如下

#!/bin/bash
echo " ----------------------------------"
echo "|这是一个简单的整数计算器,作者YUAN|"
echo " ----------------------------------"
echo
while :
do
read -p  "请输入一个整数: " nu
expr $nu + 0 &> /dev/null
if [ $? -eq 0 ]
 then
       echo "第一个数是$nu"
       break

else
       echo "您输入的$nu不是整数请重新输入"
fi
done

while :
do
read -p  "请输入二个整数: " nu2
expr $nu2 + 0 &> /dev/null
if [ $? -eq 0 ]
 then
       echo "第二个数是$nu2"
       break
else
       echo "您输入的$nu2不是整数请重新输入"
fi
done
echo  "------------------"
echo "|  1.加法          |"
echo "|  2.减法          |"
echo "|  3.乘法         |"
echo "|  4.除法         |"
echo  "------------------"
read -p "请输入您想执行的算法:" me
case $me in
       "1")
sum=`expr $nu + $nu2`
echo "$nu+$nu2=$sum"
;;
       "2")
jian=`expr $nu - $nu2`
echo "$nu-$nu2=$jian"
;;
       "3")
chen=`expr $nu \* $nu2`
echo "$nu*$nu2=$chen"
;;
       "4")
chu=`expr $nu / $nu2`
echo "$nu/$nu2=$chu"
esac


本文出自 “爱周瑜” 博客,请务必保留此出处http://izhouyu.blog.51cto.com/10318932/1889980

以上是关于shell-变量的数值计算的主要内容,如果未能解决你的问题,请参考以下文章

shell-变量的数值计算2

shell基础--变量的数值计算

shell 变量的数值计算实践 expr

shell 编程 05 -- 变量的数值计算实践(readletexprbcdeclareawk杨辉三角)

shell 编程 05 -- 变量的数值计算实践(readletexprbcdeclareawk杨辉三角)

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算