博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell-变量的数值计算
阅读量:6937 次
发布时间:2019-06-27

本文共 2470 字,大约阅读时间需要 8 分钟。

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

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

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

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

如图

[root@localhost ~]# ((a=1+2**3-4%3))

[root@localhost ~]# echo $a

8

[root@localhost ~]# b=$((1+2**3-4%3))

[root@localhost ~]# echo $b

8

[root@localhost ~]# 

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

[root@localhost ~]# echo $((a++))

8

[root@localhost ~]# echo $a

9

[root@localhost ~]# echo $((a--))

9

[root@localhost ~]# echo $a

8

[root@localhost ~]# echo $((++a))

9

[root@localhost ~]# echo $a

9

[root@localhost ~]# echo $((--a))

8

[root@localhost ~]# echo $a

8

[root@localhost ~]# 

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

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

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

[root@localhost ~]# 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 ))"

[root@localhost ~]# 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 已写入

[root@localhost ~]# sh test.sh 8 2

a-b=6

a-b=10

a-b=16

a-b=4

a-b=64

a-b=0

[root@localhost ~]# sh test.sh 8 3

a-b=5

a-b=11

a-b=24

a-b=2

a-b=512

a-b=2

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

[root@localhost shell]# cat compute.sh 

#!/bin/bash

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

[root@localhost shell]# sh compute.sh 1+2

3

[root@localhost shell]# 

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

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

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

还有一种方法可以用来判断输入是不是为数字

[ -z `echo "$1"|sed 's/[0-9]//g'`  ] && echo 1||echo 0

上面的解析是说如果$1把数字删除了,还是不是空的,如果是空的,就输出1如果不是就输出0

本文转自 周子琪 51CTO博客,原文链接:http://blog.51cto.com/izhouyu/1889980

转载地址:http://jabnl.baihongyu.com/

你可能感兴趣的文章
html5 Canvas绘制图形入门详解
查看>>
ASP.NET 5中的静态文件处理
查看>>
Queue的简单实现
查看>>
js数组转字符串
查看>>
ssm中返回中文字符串时出现乱码?
查看>>
【评分】第二次作业——个人项目实战
查看>>
javascript实现页面跳转
查看>>
servlet和filter初始化
查看>>
设为首页 添加收藏
查看>>
MySQL相关命令
查看>>
15个nosql数据库
查看>>
react-router
查看>>
【转】jmeter学习笔记——脚本录制
查看>>
I/O(流)读写函数
查看>>
A Tour of Go Variables with initializers
查看>>
A Tour of Go Interfaces
查看>>
移动APP安全检测工具大全
查看>>
最大上升子矩阵
查看>>
加快网站访问速度
查看>>
stress工具使用指南和结果分析
查看>>