记录shell编程内 对是否为数字的判断 以及 小数的计算 的问题解决方案

记录一下今天做的linux大作业其中的一个作业

题目要求:编写shell脚本,实现两个变量之间的加减乘除运算

注:以下代码为shell脚本内的代码

 1 #! /bin/bash
 2 echo "please enter first number:"
 3 read number1;
 4 if [ -z `echo "$number1" |  sed 's/[0-9][0-9]*//g'`  ] ;then #此处为判断输入的变量是否为数字,若是,则输入第二个变量
 5     echo "please enter second number:"
 6 read number2;
 7 if [ -z `echo "$number2" |  sed 's/[0-9][0-9]*//g'`  ] ;then #与第四行同理
 8     echo "number1+number2= $((number1+number2)) "
 9     echo "number1-number2= $((number1-number2)) "
10     echo "number1*number2= $((number1*number2)) "
11 if [ $number2 -eq 0 ];then #进行一次判断,即除数不能为0
12     echo "number2=0,can't devide";
13 else
14     num3=$(echo "scale=2;$number1/$number2"|bc) #考虑到除法会有小数的情况 这里借用bc进行浮点数运算,其中scale=2表示保留两位小数
15     echo "number1/number2 =$num3"
16 fi
17 else
18     echo "number2 is not a figure!";
19 fi
20 else
21     echo "number1 is not a figure!";
22 fi
23 exit 0 

对脚本的简单讲解:

1.第四行

sed 's 表示对某些内容进行替换,具体的替换规则/[0-9][0-9]*//g需要拆开来看:

第一部分/[0-9][0-9]*表示即将被替换的内容,0-9表示数字,后面的星号表示占位符,即表示任意位数,第一部分的意思就是即将被替换的内容为数字

第二部分//g 表示替换的内容,和第一部分联合起来就是把数字替换为 /g 也就是空

第四行的整体意思是把收到的变量中的数字全部替换为空,若替换完以后变量变成了空,则表示原变量全部为数字,可以进行运算

                          若替换完以后变量不全为空,则表示原变量中存在非数字的部分,不可以进行运算,提示出错

2.第十四行

echo "scale=2;$number1/$number2"|bc   表示借助bc来计算number1除以number2 |表示将前一个命令的输出转化为后一个命令的输入,将echo的输出转化为bc工具的输入,即可实现计算

这个脚本并不是最终版本,明天的任务是把这个脚本进行函数化,即当第一个数字输入错误时可以重新进行输入

猜你喜欢

转载自www.cnblogs.com/aLin002/p/12982623.html