shell-变量的数值计算

简介:

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

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

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

wKioL1hwVHaicj-lAAEicHK4YyY296.png-wh_50

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

如图

[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我们可以看看其他人写的

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

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

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

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



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

相关文章
|
12月前
|
Shell Linux
|
12月前
|
Shell Python
python 和shell 变量互相传递
python 和shell 变量互相传递
97 0
|
12月前
|
Shell Linux
Linux下的Shell基础——变量、运算符、条件判断(二)
Linux下的Shell基础——变量、运算符、条件判断(二)
156 0
|
7月前
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
53 0
|
8月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
8月前
|
Java Shell Linux
Shell 变量设置
Shell设置变量
93 5
|
9月前
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
342 1
|
8月前
|
Java Shell Linux
Shell 变量设置25-1
Shell编程语言是一种非类型的解释型语言,无需像C++/Java那样事先声明变量。通过赋值即可定义变量,在Linux支持的所有Shell中均适用。变量分为局部变量与环境变量,前者仅限于定义脚本内使用,后者可在其派生的子进程中使用。常见系统变量如$0表示当前程序名称,$n表示第n个参数(n=1,2,...,9),$*代表所有参数,$#代表参数个数,$?表示命令执行后的状态(0为成功),$UID为当前用户ID,$PWD表示当前目录。定义变量如`A=123`,
57 0
|
10月前
|
分布式计算 大数据 Shell
MaxCompute产品使用合集之odps shell如何将ech变量的结果集合写入文件,并且指定服务器的位置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
84 10
|
12月前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
下一篇
oss创建bucket